我正在使用EntityFramework 4.4版,代码优先,我在一个单独的项目(MyApp.DataModel)中创建了我的数据模型。 因为我正在构建Silverlight应用程序,所以我使用的是WCF RIA服务。 ria服务所需的代码位于不同的项目(MyApp.Services)中。该项目引用了MyApp.DataModel。
数据模型的一个例子:
[Column("Remaining")]
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public virtual decimal? Remaining
{
//
}
当我构建MyApp.Services时,我收到错误
复制'System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedAttribute'属性
实际上,在生成的代码中有两个属性
[System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedAttribute(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Computed)]
[System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedAttribute(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Computed)]
如果我删除DatabaseGenerated,那么在插入时我会收到错误 无法修改“剩余”列,因为它是计算列或是UNION运算符的结果。
知道为什么以及如何解决这个问题?
答案 0 :(得分:0)
据我所知,此处的文档为http://msdn.microsoft.com/en-us/data/gg193958.aspx,Key
已默认为DatabaseGeneratedOption.Identity
,因此您无需单独添加DatabaseGenerated。
摘自 DatabaseGenerated
下的部分:密钥属性将成为数据库中的标识密钥。那会 与将DatabaseGenerated设置为相同 DatabaseGenerationOption.Identity。如果你不希望它成为一个 身份密钥,您可以将值设置为DatabaseGenerationOption.None。
老实说,我没有对此进行过测试,但是您可以确认在删除[DatabaseGenerated(DatabaseGeneratedOption.Identity)]后,其他属性仍然保留在生成的代码中吗?
答案 1 :(得分:0)
如果您将该属性标记为DatabaseGeneratedOption.Identity,则EF了解这是关键属性。 实际上,如果您没有放置任何属性(Key或DatabaseGeneratedOption.Identity),EF将假定这是id,因为属性以'ID'结尾,并将在数据库中创建自动增量字段。 在许多情况下(与您的一样),DataAnnotations是可选的。 您也不需要将此属性标记为虚拟属性,因为它是基本类型。使用virtual just关联其他类(延迟加载)。