修改PK保存到EF4中的数据库

时间:2012-06-12 06:38:49

标签: c# .net-4.0 entity-framework-4

我们即将将具有自己的持久性objectMngr的旧应用程序移动到新的Entity框架,这样可以正常工作。问题是旧的ObjectMngr用于将主键作为字符串和有时以其自己的格式,现在为了实现兼容的持久性leyer,我需要配置EF使用相同的格式或者eventuelly来修改实体PK的节省。

我认为这是可能的,有谁知道我能在哪里做到这一点?

日Thnx

2 个答案:

答案 0 :(得分:1)

您需要将主要密钥属性的StoreGeneratedPattern设置为None。之后,您可以使用在旧解决方案中使用的相同代码来自行分配主键值。

答案 1 :(得分:1)

Stackoverflow多次询问此问题。请阅读此回复:Does Entity Framework 4 Code First have support for identity generators like NHibernate?

它解决了您描述的问题。如果您不使用代码优先方法,则在生成的类中覆盖继承自ObjectContext的SaveChanges方法。类DbContext仅用于Code First方法。 E.g:

public interface IEntity
{
    string Id { get; set; }
}

public partial class MyEntity: IEntity
{
}

public partial class MyEntities
{
    public override int SaveChanges(System.Data.Objects.SaveOptions options)
    {
        var generator = new IdGenerator();

        foreach(var entry in this.ObjectStateManager.GetObjectStateEntries(EntityState.Added))
        {
            var entity = entry.Entity as IEntity;
            if (entity != null)
            {
                entity.Id = generator.CreateNewId();
            }
        }

        return base.SaveChanges(options);
    }
}

此示例假设您为模型中的所有类(如IEntity)实现MyEntity,这取决于PK的特殊生成,MyEntities是{{1 }}。 ObjectContext应该提供提供主键的方法。此代码还要求属性IdGenerator位于生成的代码中。