我正在使用Entity Framework 4.0
我们的许多表都有一个名为RowID的列,由DBA用来跟踪内容。列为NON NULLABLE,具有映射到函数的数据库默认值。
问题是,EDMX模型要求此属性在实体上具有值,使得构造对象变得困难。
我已经阅读了许多关于手动调整EDMX和SSDL文件以使其工作的帖子。这对我们的团队来说是不可行的。
除了在数据库中使列为NULLABLE之外,还有更好的解决方案吗?我不关心获取值,我只是希望数据库能够自己设置它。
答案 0 :(得分:6)
您应该直接在SSDL(模型背后的XML)中设置StoreGeneratedPattern =“Computed”。
1 - 右键单击Model
2 - 选择“打开方式”=> Xml编辑器
3 - 查看“模型内容”部分下的其中一个表的映射
4 - 将StoreGeneratedPattern =“Computed”属性添加到RowID列
5 - 对您的文件进行全局替换,以便每个表都具有StoreIDneratedPattern =“Computed”的RowID定义
注意: 如果使用“更新模型向导”,则需要再次手动更新XML。我的建议:不要使用向导或将原始和更改的xml行保存到单独的文本文件中,以便在运行向导后可以使用它们进行全局替换。
有关更多信息,请参阅此文章: http://msdn.microsoft.com/en-us/library/dd296755(v=vs.90).aspx
答案 1 :(得分:2)
如果永远不需要在应用程序的上下文中读取或写入RowID,那么它根本不属于您的实体模型。 只需使用Designer(右键单击>删除)将其从实体模型中删除,然后让数据库对其进行管理。