为使用EntityFramework 4的实体分配ID

| 我想为我的实体实现\“ default \” 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。但是,我有一个“代码优先”示例,可能会有所帮助。 在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);
    }
}
    
在继续搜索,阅读并与一些比我现在了解更多有关EF的朋友进行讨论之后,我认为用当前的Entity Framework实现实现我正在寻找的唯一实用,可持续的方法是创建自定义实体框架提供程序,如本博文所述。 我是否必须花时间来实现这一点,但我认为至少要总结一下这个答案。定制提供程序还将允许实体实现读时解密/写属性时加密。 不过,我希望这些功能都能融入EntityFramework的未来版本中。     

要回复问题请先登录注册