C# 重复';System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedAttribute';属性
我使用的是EntityFramework版本4.4,代码优先,我已经在一个单独的项目(MyApp.DataModel)中创建了我的数据模型。 因为我正在构建Silverlight应用程序,所以我正在使用WCF RIA服务。ria服务所需的代码位于不同的项目(MyApp.services)中。此项目引用了MyApp.DataModel 数据模型的一个示例:C# 重复';System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedAttribute';属性,c#,entity-framework,ria,C#,Entity Framework,Ria,我使用的是EntityFramework版本4.4,代码优先,我已经在一个单独的项目(MyApp.DataModel)中创建了我的数据模型。 因为我正在构建Silverlight应用程序,所以我正在使用WCF RIA服务。ria服务所需的代码位于不同的项目(MyApp.services)中。此项目引用了MyApp.DataModel 数据模型的一个示例: [Column("Remaining")] [DatabaseGenerated(DatabaseGeneratedOption
[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,那么在插入时会出现一个错误
无法修改列“剩余”,因为它是计算列或是联合运算符的结果
你知道为什么以及如何解决这个问题吗?据我所知,这里的文档:,
Key
已经默认为DatabaseGeneratedOption.Identity
,所以你不需要添加单独生成的数据库
从DatabaseGenerated下的零件摘录:
密钥属性将成为数据库中的标识密钥。那会
与将DatabaseGenerated设置为相同
DatabaseGenerationOption.Identity。如果你不想让它成为一个
标识键,可以将该值设置为DatabaseGenerationOption.None
老实说,我还没有对此进行测试,但您能否确认在删除[DatabaseGenerated(DatabaseGenerateOptions.Identity)]后,其他属性仍保留在生成的代码中?如果将属性标记为DatabaseGenerateOptions.Identity,EF会理解这是关键属性。 实际上,如果不放置none属性(Key或DatabaseGeneratedOption.Identity),EF将假定这是id,因为属性以“id”结尾,并将在数据库中创建一个自动增量字段。 DataAnnotation在许多情况下都是可选的(比如您的)。
您也不需要将此属性标记为虚拟属性,因为它是基本类型。使用虚拟仅关联其他类(延迟加载)。谢谢。。我已经更仔细地阅读了文档并测试了这种情况,您是对的。[Key]已默认为DatabaseGeneratedOption.Identity。我有另一个问题,但这次是databasegenerated.computed。我已经编辑了我的第一篇文章。非常感谢您的帮助。我还有一个问题,但这次是databasegenerated.computed。我已经编辑了我的第一篇文章。。谢谢你的帮助。