我已经阅读了与此相关的所有帖子,并且我已经尝试了所有这些但不是结果。
我使用流畅的api将我的模型映射到数据库。但是当我查询我得到这个错误:
Method not found:
'System.Data.Entity.ModelConfiguration.Configuration.DecimalPropertyConfiguration
System.Data.Entity.ModelConfiguration.Configuration.DecimalPropertyConfiguration.HasDatabaseGeneratedOption(System.Nullable`1<System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption>)'.
我的模型看起来像这样:
ToTable("table_name");
HasKey(x => x.CounterId)//this property IS NOT NULLABLE
.Property(x => x.CounterId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)
.HasColumnName("dbCounter_Id")
.HasPrecision(10, 0)
.IsRequired();
Property(x => x.HouseId)
.HasColumnName("dbHouseId");
Property(x => x.ApplicationId)
.HasColumnName("dbApplication_id");
出于某种原因.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)
给我这个错误,所以当我退出时:
HasKey(x => x.CounterId)
.Property(x => x.PageId)
.HasColumnName("dbCounter_Id")
.HasPrecision(10, 0)
.IsRequired();
我得到的不是错误,而是因为我很幸运,,当我尝试将记录添加到该表时我得到insert identity exception。我无法添加或退出HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)
方法。
重要提示:键CounterId
不是类型INTEGER,而是DECIMAL(10,0)。这可能是问题吗?我无法更改列的数据类型,因为生产中有很多应用程序会以最差的方式生效。
希望我能得到任何帮助。
答案 0 :(得分:3)
你应该这样做
ToTable("table_name");
HasKey(x => x.CounterId); // you should split HasKey from Property
Property(x => x.CounterId)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)
.HasColumnName("dbCounter_Id")
.HasPrecision(10, 0)
.IsRequired();
Property(x => x.HouseId)
.HasColumnName("dbHouseId");
Property(x => x.ApplicationId)
.HasColumnName("dbApplication_id");
答案 1 :(得分:1)
您应该尝试从所有项目中删除nuget包。然后再添加一次。
我不知道为什么,但它对我有用,即使包装是相同的。
答案 2 :(得分:0)
此错误的原因之一是由于项目的.NET版本不同。例如如果您的EF DbContext类是在.NET v4.5的项目中创建的,并且如果使用它的Web应用程序是.NET v4.0的,则在运行时可能会收到此错误。
理想情况下,它应该在编译时出错。但是,有时Visual Studio可以很好地编译,尤其是对于较旧的“网站”类型的项目。而且,当应用程序实际运行时,即发生错误。
因此,要解决此问题,请确保客户端应用程序(使用EF DbContext类)的.NET框架版本为> =包含DbContext的项目的.NET版本。
答案 3 :(得分:0)
我在使用 EF6 和 ASP.Net 3.1 时遇到了类似的问题。这个答案帮助我朝着正确的方向轻推,但我解决的方法略有不同。我需要做的就是在表所基于的模型类中添加以下内容:
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int Round { get; set; }