我想为我的实体实现“默认”ID 生成支持。
保存实体时,我希望 EntityFramework 仅生成实体的 id 值(如果尚未设置)。如果 ID 已经具有非空、非零值,我希望在将实体保存到数据库中时保留该实体 ID。
我正在将数据从旧数据模型(从旧数据库创建的 EntityFramework 模型)迁移到新创建的(模型优先)EntityFramework 模型。我们将旧型号称为 A,将新型号称为 T。
通常,我希望 T 实体在保存时设置其 Id(它们都是 int64),以便长期使用新模型。
目前,我根据要从中迁移的相应 A 实体的 Id 显式分配 T 实体 Id。这样迁移结果就很容易检查。
但是,尽管我可以在迁移例程中将 T 实体的 id 分配给与 A 实体相同的 id,但在保存实体后,Id 值已更改。
有没有办法覆盖 T 模型中所有实体的默认保存方法,以便仅在保存之前尚未在实体中设置 id 值时才分配它?
我在这里查看了其他一些 EntityFramework/Id 问题,但在我看来,他们都没有问同样的事情。
感谢您提供任何线索。
我看到您提到您正在使用模型优先。不过,我有一个 Code First 示例,可能会有所帮助。
在 T 实体上,id 属性上有一个 [Key] 属性,不是吗?如果是这样,您可以使用另一个属性,数据库生成的属性 http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.databasegeneratedattribute%28v=vs.103%29.aspx,强制设置身份。
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);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)