主键"是对象键的一部分"新对象DatabaseGeneratedOption.None

时间:2014-06-04 09:06:09

标签: entity-framework

我有这个POCO课程

public class EfectoC
{
    public int Id { get; set; }
}

和EF配置:

public class EfectoCMap : EntityTypeConfiguration<EfectoC> 
{
    public EfectoCMap()
    {
       // Primary Key            
       this.HasKey(t => t.Id );

       // Properties
         this.Property(t => t.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None );
     } 
}

真的很简单,

问题在于我这样做:

EfectoC efC= new EfectoC();
efC.Id = 44;

引发此异常: 属性“Id”是对象关键信息的一部分,无法修改

为什么会这样?我有DatabaseGeneratedOption.None所以我可以编写pk,特别是在新实例中。

有什么想法吗?

提前感谢

1 个答案:

答案 0 :(得分:0)

Id不可为空,因此当您使用EfectoC efC= new EfectoC()调用构造函数时,Id设置为零,并且Entity Framework不允许您在设置主键后更改主键。

您有两个选择:

添加一个将Id作为参数的构造函数

public EfectoC(int id)
{
   Id = id;
}

使Id可以为空:

public int? Id { get; set; }