c# - 使用 EntityFramework 4 为实体分配 ID

标签 c# entity-framework-4 savechanges

我想为我的实体实现“默认”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/

相关文章:

c# - 使用 System.Speech 将音频文件转换为文本

C#串口读取错误

用于单元测试的 C# 通用存储库

wpf - EF EntityObject 不更新关系的数据绑定(bind)

c# - LINQ2SQL 或 Entity Framework 或企业库?

c# - 如何在asp .net中解析Json

entity-framework - 如何使用 Entity Framework 4 继承来确定实体的子类型?

entity-framework - 异步 ObjectContext.SaveChanges()?

c# - 使用 AspNet.Identity UserManager 时检测更改

oracle - 我需要在一笔交易中进行多次 Breeze SaveChanges