C# EF 6使用提供的ID插入实体仍会生成ID

C# EF 6使用提供的ID插入实体仍会生成ID,c#,entity-framework,entity-framework-6,C#,Entity Framework,Entity Framework 6,我有一个ID字段为的实体 public class AgentOrder : BaseEntity { public int Id { get; set; } } public class AgentOrderMap : EntityTypeConfiguration<AgentOrder> { public AgentOrderMap() { ToTable("AgentOrder"); HasKey(m =>

我有一个ID字段为的实体

public class AgentOrder : BaseEntity
{
        public int Id { get; set; }
}

public class AgentOrderMap : EntityTypeConfiguration<AgentOrder>
{
    public AgentOrderMap()
    {
        ToTable("AgentOrder");
        HasKey(m => m.Id);
        Property(m => m.Status);
    }
}
公共类代理程序:BaseEntity
{
公共int Id{get;set;}
}
公共类代理映射:EntityTypeConfiguration
{
公共代理程序
{
ToTable(“代理”);
HasKey(m=>m.Id);
属性(m=>m.Status);
}
}
我创建了一个新实体并定义了Id属性。但当我保存更改时,新实体不是使用我定义的Id创建的,而是使用自动生成的Id创建的


这是密钥属性的正常行为吗

按照惯例,id属性使用Identity,因此无法手动插入。如下所示进行配置:


Property(l=>l.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None)

按照惯例,id属性使用标识,因此无法手动插入。如下所示进行配置:


Property(l=>l.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None)

由于您使用的是Fluent配置,因此只需关闭默认的标识插入配置:

因此:

 public AgentOrderMap()
{
    ToTable("AgentOrder");
    HasKey(m => m.Id);
    Property(m => m.Status);
}
变成:

public AgentOrderMap()
{
    ToTable("AgentOrder");
    HasKey(m => m.Id);
    Property(m => m.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
    Property(m => m.Status);
}

请注意,您的数据库需要支持此功能,并关闭标识插入功能。

由于您使用的是Fluent配置,您只需关闭默认标识插入配置:

因此:

 public AgentOrderMap()
{
    ToTable("AgentOrder");
    HasKey(m => m.Id);
    Property(m => m.Status);
}
变成:

public AgentOrderMap()
{
    ToTable("AgentOrder");
    HasKey(m => m.Id);
    Property(m => m.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
    Property(m => m.Status);
}

请注意,您的数据库需要支持此功能并关闭标识插入功能。

首先,什么是
BaseEntity
,其次,您如何添加实体?数据库中的Id列配置为标识列?首先,什么是
BaseEntity
,其次,如何添加实体?数据库中的Id列被配置为Identity列?是的,这很有效。非常感谢。但是MS SQL需要显式地允许输入ID字段,所以我决定让ID字段自动生成,然后再添加一个字段以供手动添加。是的,这很有效。非常感谢。然而,MS SQL需要显式地允许输入ID字段,所以我决定让ID字段自动生成,然后再添加一个字段以供手动添加。