Hai*_*atz 5 c# entity-framework primary-key ef-code-first
我正在使用EF 6.1.3代码优先,但由于数据库已经存在,所以无法进行迁移。我有一个SRReports具有以下属性的实体:
[Key, Required]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.None)]
public int FRID { get; set; }
Run Code Online (Sandbox Code Playgroud)
DatabaseGeneratedOption.None假设FRID是自动生成的,实体框架将忽略,并将TSQL发送到服务器。为实体分配了FRID的值,但是实体框架忽略该值,并假定该值是自动生成的。(这是通过检查发送到服务器的TRACE确认的)。异常消息是:
Message =无法将值NULL插入表'RevLogon.dbo.SCIREPORTS'的列'FRID'中;列不允许为空。INSERT失败。该语句已终止。
我尝试使用流利的API来代替注释(并在注释之外)。
modelBuilder.Entity<SCIREPORTS>()
.HasKey(e => e.FRID);
modelBuilder.Entity<SCIREPORTS>()
.Property(e => e.FRID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
Run Code Online (Sandbox Code Playgroud)
但是当我查询表时出现错误:
SCIREPORTS sr = mydb.SCIREPORTS.Where(s => s.FRID == FRID ).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
捕获到System.MissingMethodException HResult = -2146233069消息=未找到方法:“ System.Data.Entity.ModelConfiguration.Configuration.PrimitivePropertyConfiguration System.Data.Entity.ModelConfiguration.Configuration.PrimitivePropertyConfiguration.HasDatabaseGeneratedOption(System.Nullable`1)”。*
我已卸载并重新安装了EF软件包,但无法解决此问题。如何获得EF插入带有ID的记录?
这是插入记录的基本代码:
public SRUserComp(string myemail, short mycounter, int myFRID, string myreptype, string mypassword)
{ email = myemail;
Counter = mycounter;
reptype = myreptype;
password = mypassword;
FRID = myFRID; }
public bool CreateSRRecord(DateTime repduedate,
short repnumber)
{BSRModel mydb = new BSRModel();
sr = new SCIREPORTS();
sr.FRID = FRID;
sr.Counter = Counter;
sr.Final = true;
sr.RepDueDate = repduedate;
mydb.SCIREPORTS.Add(sr);
mydb.SaveChanges();
return true; }
Run Code Online (Sandbox Code Playgroud)
在saveChanges语句之后,我从服务器上的sql profiler获取以下语句:
INSERT [dbo].[SCIREPORTS]([Counter], [RepDueDate], [RepArrivalDate],
[SciAppDate], [Adminappdate], [legacyDate], [RepNumber], [Final],
[RepReminderID], [Notes], [HaimSaw], [ResAuthApprovDate])
VALUES (@0, @1, NULL, NULL, NULL, NULL, @2, @3, NULL, NULL, NULL, NULL)
SELECT [FRID]
FROM [dbo].[SCIREPORTS]
WHERE @@ROWCOUNT > 0 AND [FRID] = scope_identity()
Run Code Online (Sandbox Code Playgroud)