我想为我的实体实现“默认”Id 生成支持。
保存实体时,我希望 EntityFramework 只为尚未设置的实体生成 id 值。如果 ID 已经具有非空、非零值,我希望在将实体保存在数据库中时保留该实体 ID。
我正在将数据从遗留数据模型(从旧数据库创建的 EntityFramework 模型)迁移到新创建的(模型优先)EntityFramework 模型。我们称旧模型为 A,新模型为 T。
通常,我希望 T 个实体在保存时设置它们的 ID(它们都是 int64),以便长期使用新模型。
目前,我根据要从中迁移的相应 A 实体的 ID 显式分配 T 实体 ID。这样迁移结果就很容易检查。
但是,尽管我可以在迁移例程中将 T 实体的 ID 分配给与 A 实体相同的 ID,但在我保存实体后,Id 值已更改。
有没有办法覆盖 T 模型中所有实体的默认保存方法,以便只有在保存之前尚未在实体中设置 id 值时才分配 id 值?
我在这里查看了其他一些 EntityFramework/Id 问题,但在我看来,他们都没有问同样的事情。
感谢任何线索。
最佳答案
我看到您提到您正在使用 Model First。不过,我有一个 Code First 示例可能会有所帮助。
在 T 实体上,您在 id 属性上有一个 [Key] 属性,不是吗?如果是这样,您可以使用另一个属性 DatabaseGeneratedAttribute , 以强制设置标识。
public class SomeEntity
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int? SomeEntityID { get; set; }
}
此外,还有一个 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);
}
}
关于c# - 使用 EntityFramework 4 为实体分配 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5643620/