【问题标题】:Dynamic Data with Entity Framework... using [ScaffoldColumn(true)] to show a public property via metadata具有实体框架的动态数据...使用 [ScaffoldColumn(true)] 通过元数据显示公共属性
【发布时间】:2010-11-13 21:43:46
【问题描述】:

...它根本不起作用。我已经尝试了好几天,使用了各种不同的 frick'n 组合,它不会让步。

肯定有一些人似乎在写博客来轻松解决这类事情而没有看到一个问题,说“我们都知道你可以通过......显示扩展 EF 类的公共属性”和“如果你想扩展你的数据模型来显示一个计算字段,只需......” - 对我来说不是那么简单 - 啊啊啊啊!!!

因此,根据所有典型示例,我的 EF 部分类如下所示:

[DisplayColumn("Name")]
[MetadataType(typeof(SaleProduct_Metadata))]
public partial class SaleProduct
{        
    public string Test
    {
        get
        {
            return "blah";
        }
    }

    public class SaleProduct_Metadata
    {
        [ScaffoldColumn(true)] 
        public string Test;
    }
}  

我的 global.asax 看起来像这样:

        MetaModel model = new MetaModel();
        model.RegisterContext(typeof(Sale.Models.SaleEntities), new ContextConfiguration() { ScaffoldAllTables = true });
        routes.Add(new DynamicDataRoute("DD/{table}/{action}.aspx")
        {
            Constraints = new RouteValueDictionary(new { action = "List|Details|Edit|Insert" }),
            Model = model
        });

我的 List.aspx.cs 看起来像这样:

public partial class List : System.Web.UI.Page
{
    protected MetaTable table;

    protected void Page_Init(object sender, EventArgs e)
    {
        //DynamicDataManager1.RegisterControl(GridView1, true /*setSelectionFromUrl*/);
        table = GridDataSource.GetTable();
        DynamicDataManager1.RegisterControl(GridView1, true /*setSelectionFromUrl*/);
        GridView1.ColumnsGenerator = new AdvancedFieldGenerator(table, true);
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        table = GridDataSource.GetTable();
        Title = table.DisplayName;
        GridDataSource.Include = table.ForeignKeyColumnsNames;
        InsertHyperLink.NavigateUrl = table.GetActionPath(PageAction.Insert);

        // Disable various options if the table is readonly
        if (table.IsReadOnly)
        {
            GridView1.Columns[0].Visible = false;
            InsertHyperLink.Visible = false;
        }
    }

    protected void OnFilterSelectedIndexChanged(object sender, EventArgs e)
    {
        GridView1.PageIndex = 0;
    }
}

...我正在使用动态数据期货的一个版本来获得列排序、更好的验证等功能,这些功能运行良好。对(例如)List.aspx.cs(如上所示)进行了一些调整,并更改了日期格式,以便新西兰风格的日期在我的美国网络服务器上工作。除此之外,一切都很标准,AFAIK。

我的 EF 模型位于一个单独的程序集中,并且(显然)使用部分类扩展了一些实体。我只想展示两个经过计算的血腥领域,但根本没有成功。我觉得我是一个新的程序员,我的头撞在砖墙上——旧的把戏都不管用。编程不应该这么难:-(

有人,任何人,请帮忙!!

伯纳德。

【问题讨论】:

  • 如果你在这里没有得到一口...试试 asp.net 动态数据论坛...那里的一个家伙很了不起并回复了 DD 帖子...

标签: entity-framework metadata dynamic-data scaffolding public-fields


【解决方案1】:

我不确定,但如果您使用的是 EF 3.5 SP1...

这意味着您的类派生自EntityObject,我怀疑动态数据是这种情况的特殊情况,并使用知道如何从ObjectContext 获取EF 元数据的自定义TypeDescriptionProvider,然后伪造必要的属性.

可能是问题的原因,因为TypeDescriptionProvider 可能只使用 EF 知道的属性的元数据。这当然不包括您的计算属性。

我知道这不是“答案”,但希望它能为您指明正确的方向。

亚历克斯

【讨论】:

    【解决方案2】:

    使用 EF 时,分部类的命名空间必须与为您生成的分部类的命名空间相匹配。在 Linq-2-SQL 版本中,生成的部分类没有命名空间,因此它可以正常工作。 http://forums.asp.net/t/1473192.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多