EF忽略DatabaseGeneratedOption.None

时间:2015-06-02 08:27:11

标签: c# entity-framework ef-code-first primary-key

我正在使用EF 6.1.3 Code First,但没有迁移,因为数据库已经存在。我有一个具有以下属性的实体SRReports

[Key, Required]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.None)]
public int FRID { get; set; }

实体框架忽略DatabaseGeneratedOption.None并将TSQL发送到服务器,假设FRID是自动生成的。为实体分配了一个FRID值,但实体框架忽略它并假定它是自动生成的。 (通过检查发送到服务器的内容的TRACE来确认)。异常消息是:

  

Message =无法将值NULL插入列' FRID',table' RevLogon.dbo.SCIREPORTS&#39 ;;列不允许空值。 INSERT失败。   声明已经终止。

我尝试使用流畅的API而不是(以及除此之外)注释。

 modelBuilder.Entity<SCIREPORTS>()
            .HasKey(e => e.FRID);
 modelBuilder.Entity<SCIREPORTS>()
            .Property(e =>  e.FRID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);

但是当我查询表时,我得到了错误:

SCIREPORTS sr = mydb.SCIREPORTS.Where(s => s.FRID == FRID     ).FirstOrDefault();     

我收到以下错误:

  

发现了System.MissingMethodException     的HResult = -2146233069     Message =找不到方法:&#39; System.Data.Entity.ModelConfiguration.Configuration.PrimitivePropertyConfiguration System.Data.Entity.ModelConfiguration.Configuration.PrimitivePropertyConfiguration.HasDatabaseGeneratedOption(System.Nullable`1)&#39;。*

我已经卸载并重新安装了我的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; }   

在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()      

0 个答案:

没有答案