1

我们即将将具有自己持久性 objectMngr 的旧应用程序移动到新的实体框架,这工作正常。问题是旧的 ObjectMngr 过去常常将主键作为字符串,有时以自己的格式保存,现在为了实现兼容的持久性,我需要将 EF 配置为使用相同的格式,或者最终修改实体 PK 的保存.

我假设这是可能的,有人知道我在哪里可以做到吗?

谢谢

4

2 回答 2

1

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

于 2012-06-12T07:03:23.800 回答
1

这个问题在 Stackoverflow 上被问了好几次。请阅读此回复:Entity Framework 4 Code First 是否支持 NHibernate 等身份生成器?

它解决了您描述的问题。如果您不像您的情况那样使用代码优先方法,则覆盖从 ObjectContext 继承的生成类中的 SaveChanges 方法。DbContext 类仅用于 Code First 方法。例如:

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 的特殊生成,并且MyEntitiesObjectContext. IdGenerator应该提供您提供主键的方法。此代码还要求该属性Id位于生成的代码中。

于 2012-06-14T12:24:04.430 回答