我们即将将具有自己的持久性objectMngr的旧应用程序移动到新的Entity框架,这样可以正常工作。问题是旧的ObjectMngr用于将主键作为字符串和有时以其自己的格式,现在为了实现兼容的持久性leyer,我需要配置EF使用相同的格式或者eventuelly来修改实体PK的节省。
我认为这是可能的,有谁知道我能在哪里做到这一点?
日Thnx
答案 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
位于生成的代码中。