0

我正在使用带有实体框架模型的动态数据。如果我将它与 1 个 EF 模型一起使用,那么这就像一个魅力。

但现在我需要在我的动态数据项目中使用多个 EF 模型,并且在注册过程中收到错误消息。

代码:

    public static void RegisterRoutes(RouteCollection routes)
    {
        var model1 = new MetaModel();
        model1.RegisterContext(() =>
        {
            return ((IObjectContextAdapter)new Model1Entities()).ObjectContext;
        }, new ContextConfiguration() { ScaffoldAllTables = true });

        routes.Add(new DynamicDataRoute("model1/{table}/{action}.aspx")
        {
            Constraints = new RouteValueDictionary(new { action = "List|Details|Edit|Insert" }),
            Model = model1
        });


        var model2 = new MetaModel();
        model2.RegisterContext(() =>
        {
            return ((IObjectContextAdapter)new Model2Entities()).ObjectContext;
        }, new ContextConfiguration() { ScaffoldAllTables = true });

        routes.Add(new DynamicDataRoute("model2/{table}/{action}.aspx")
        {
            Constraints = new RouteValueDictionary(new { action = "List|Details|Edit|Insert" }),
            Model = model2
        });
    }

在运行时,当他执行 model2.RegisterContext 时我收到一个错误。

错误:

项目已添加。字典中的键:'System.Data.Objects.ObjectContext' 添加的键:'System.Data.Objects.ObjectContext'

因此,对于模型 1,他可以注册上下文,但对于模型 2,他因此错误而被阻止。

如果你知道如何解决这个问题,请指教!

4

2 回答 2

0

嗨汤姆,

一个多月以来我有同样的问题。我对此进行了很多次调查,因为它阻碍了我的项目。我在这里开始了一个论坛条目:

http://forums.asp.net/t/1946475.aspx?Duplicated+key+when+try+to+register+multiple+ObjectContexts+in+Dynamic+Data

它在以前的版本中工作。有一种解决方法(请参阅http://blog.davidebbo.com/2011/01/using-dynamic-data-with-ef-code-first.html),但这对当前版本不再有帮助。

简而言之:这是一个 ASP.Net 错误。由于我们不能直接调用 DbContext(这将是可区分的)并且我们必须调用 ObjectContext,并且 MetaModel 的内部字典使用没有命名空间的类型作为键(即总是“ObjectType”),所以没有办法绕过它。

幸运的是,ASP.Net 团队现在正在对其进行调查。在提到的论坛页面上随时了解情况。

2014 年 3 月更新:当前版本http://blogs.msdn.com/b/webdev/archive/2014/02/28/announcing-the-release-of-dynamic-data-provider-and-entitydatasource-control-for -entity-framework-6.aspx解决了这个问题。

于 2013-11-28T12:09:45.453 回答
0

我分两步让它工作:

  • 通过删除我的实体模型中的“.tt”文件。
  • 在您的 edmx 模型中,将属性“代码生成策略”设置为模型的“默认”。(并重建您的解决方案)

在此之后,他接受了多个实体的注册。

于 2013-12-02T13:14:40.170 回答