2010-06-21 80 views
6

我使用实体框架4.0实体框架4.0使用数据库默认值

我们的许多表有一个名为ROWID列,使用由DBA跟踪的东西。该列是不可空的,具有映射到函数的数据库默认值。

问题是,EDMX模型要求这个属性在实体上有一个值,使对象的构建变得困难。

我已经阅读了很多关于手动调整EDMX和SSDL文件的文章,以使这项工作。这对我们的团队来说是不可行的。

除了在数据库中设置NULLABLE之外,还有更好的解决方案吗?我不在乎如何获取价值,我只是希望数据库能够自行设置。

回答

2

如果RowID永远不需要在应用程序的上下文中读取或写入,那么它根本不属于您的实体模型。 只需使用设计器(右键单击>删除)从您的实体模型中删除它并让数据库管理它。

+0

的问题是ROWID是在其它表FK,所以我需要能够得到它,创造子实体时使用它。 – ctorx 2010-06-22 19:24:44

6

您应该直接在SSDL(模型后面的XML)中设置StoreGeneratedPattern =“Computed”。

1 - 右键单击​​Model

2 - 选择 “打开”=> XML编辑器

3 - 查找表中的一个的映射根据示范内容部分

4 - 将StoreGeneratedPattern =“Computed”属性添加到R​​owID列

5 - 对文件执行全局替换,以便每个表都具有StoreGeneratedPattern =“Computed”的RowID定义

注: 如果使用更新模型向导,您将需要再次手动更新XML。我的建议是:不要使用向导或将原始和更改的xml行保存到单独的文本文件中,以便在运行向导后让它们可用于执行全局替换。

欲了解更多信息,请参阅这篇文章: http://msdn.microsoft.com/en-us/library/dd296755(v=vs.90).aspx

+1

我正在使用实体框架5,并且当我设置StoreGeneratedPattern = Computed然后使用“从数据库更新模型...”向导时,该字段是* not * reset。 – DaveD 2012-11-27 19:39:11

相关问题