Joh*_*ter 9 c# savechanges entity-framework-4
我想为我的实体实现"默认"Id生成支持.
保存实体时,我希望EntityFramework只生成实体的id值(如果尚未设置).如果ID已经具有非null,非零值,我希望在将实体保存在数据库中时保留该实体ID.
我正在将数据从遗留数据模型(从旧数据库创建的EntityFramework模型)迁移到新创建的(模型优先)EntityFramework模型.让我们称之为旧模型A和新模型T.
通常,我希望T实体在保存时设置它们的ID(它们都是int64),以便长期使用新模型.
目前,我明确地根据我正在迁移的相应A实体的Id来分配T实体ID.这样就很容易检查迁移结果.
但是,虽然我可以将T实体的id分配给与迁移例程中的A实体相同的id,但在保存实体后,Id值已更改.
有没有办法覆盖T模型中所有实体的默认保存方法,因此只有在保存之前尚未在实体中设置id值时才分配id值?
我在这里看了一些其他的EntityFramework/Id问题,但在我看来,他们都没有问过同样的问题.
感谢任何线索.
我看到您提到您正在使用模型优先。不过,我有一个 Code First 示例,可能会有所帮助。
在 T 实体上,id 属性上有一个 [Key] 属性,不是吗?如果是这样,您可以使用另一个属性DatabaseGeneeratedAttribute来强制设置标识。
public class SomeEntity
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int? SomeEntityID { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
此外,还有一个 Fluent API 调用可以实现类似的结果:
public class YourContext : DbContext
{
protected override void OnModelCreating( DbModelBuilder dbModelBuilder )
{
base.OnModelCreating( dbModelBuilder );
var config = dbModelBuilder.Entity<SomeEntity>();
config.Property(e => e.SomeEntityID).HasDatabaseGeneratedOption( DatabaseGeneratedOption.None);
}
}
Run Code Online (Sandbox Code Playgroud)