ASP.NET 使用实体框架的动态数据:多对多在服务器上插入差异



我创建了一个简单的 ASP.NET 动态数据应用程序,它在我的开发机器上完美运行。当我部署它时,除了与其他表具有多对多关系的项目的插入页外,一切正常。编辑页面正常,显示多对多复选框。服务器已安装.NET 4.0

我按照这里的说明进行操作:http://go.microsoft.com/fwlink/?LinkId=257395

有人知道问题可能是什么吗?

> 我不是100%确定,但我认为System.Web.DynamicData.dll和System.Web.DynamicData.Design.dll的版本在我的开发机器和服务器上是不同的,所以你可能想仔细检查一下。我还记得我必须为所有关系表设置主键,但这可能是一个单独的问题......这将教会我在找到解决方案时回答自己的问题......

@TimS:如果您可以添加有关您的情况的任何其他信息,可能会有所帮助 - 这是否也适用于您在一个环境中而不是另一个环境?您是否知道两种环境中所有已安装组件的版本?

如果我正确理解这个问题,我会看的前两个地方是:

  1. 假设您有从表单到实体/模型的某种自动映射,您是否需要在加载"插入"页面之前使用默认值初始化实体或模型?

  2. 您的数据库在两种设置中是否相同 - 定义了相同的键(我假设代码相同......

  1. 确保多对多表具有由两个相关表的主键组成的主键。

  2. 确保表在 EDMX 中显示为表而不是视图(特别是如果您使用的是 DB-first 并且必须修复第 1 点)。

  3. 如果使用 POCO,请确保关系属性(和其他属性)是公共的或受保护的,并且是虚拟的。

  4. 如果您使用的是 POCO,请确保在更改时修复关系的另一端(POCO-T4 中的默认值)。

  5. 如果您使用两个实体设置关系,例如 a 和 b

    ,则使用:

    a.Bs.Add(b);
    然后,如果创建 a 作为代理,例如
    a = context.As.CreateObject();

    而不是:
    a = new A();

    EF 将更容易识别更改。

    此外,如果使用的是ObjectContext可以调用
    context.SaveChanges(SaveOptions.DetectChangesBeforeSave | SaveOptions.AcceptAllChangesAfterSave);
    来帮助 EF 查找更改。

最新更新