我创建了一个简单的 ASP.NET 动态数据应用程序,它在我的开发机器上完美运行。当我部署它时,除了与其他表具有多对多关系的项目的插入页外,一切正常。编辑页面正常,显示多对多复选框。服务器已安装.NET 4.0
。
我按照这里的说明进行操作:http://go.microsoft.com/fwlink/?LinkId=257395
有人知道问题可能是什么吗?
> 我不是100%确定,但我认为System.Web.DynamicData.dll和System.Web.DynamicData.Design.dll的版本在我的开发机器和服务器上是不同的,所以你可能想仔细检查一下。我还记得我必须为所有关系表设置主键,但这可能是一个单独的问题......这将教会我在找到解决方案时回答自己的问题......
@TimS:如果您可以添加有关您的情况的任何其他信息,可能会有所帮助 - 这是否也适用于您在一个环境中而不是另一个环境?您是否知道两种环境中所有已安装组件的版本?
如果我正确理解这个问题,我会看的前两个地方是:
-
假设您有从表单到实体/模型的某种自动映射,您是否需要在加载"插入"页面之前使用默认值初始化实体或模型?
-
您的数据库在两种设置中是否相同 - 定义了相同的键(我假设代码相同......
-
确保多对多表具有由两个相关表的主键组成的主键。
-
确保表在 EDMX 中显示为表而不是视图(特别是如果您使用的是 DB-first 并且必须修复第 1 点)。
-
如果使用 POCO,请确保关系属性(和其他属性)是公共的或受保护的,并且是虚拟的。
-
如果您使用的是 POCO,请确保在更改时修复关系的另一端(POCO-T4 中的默认值)。
-
如果您使用两个实体设置关系,例如 a 和 b
,则使用:
a.Bs.Add(b);
然后,如果创建 a 作为代理,例如
a = context.As.CreateObject();
而不是:
a = new A();
EF 将更容易识别更改。
此外,如果使用的是ObjectContext
可以调用context.SaveChanges(SaveOptions.DetectChangesBeforeSave | SaveOptions.AcceptAllChangesAfterSave);
来帮助 EF 查找更改。