我当前的设置:
我有一个具有一些属性的实体对象,其中包括int Id
。为了与数据库通信,我创建了一个存储库,其中包括以下方法:
public int Add(TEntity entity)
{
ObjectSet.AddObject(entity);
return entity.Id;
}
(它是一个通用存储库,要求TEntity
是class
,并且它实现IEntity
,它只是一个具有int Id
属性的接口。)
我的问题:
现在,当我想创建一个新的实体来添加到存储库时,我需要给它一个id。但是,这不允许EF为我自动生成id,因为它已经有了一个值。
可能的解决方案:
我只能想到这两种可能性。
Id
属性可以为空EntryInputModel
传递给存储库,然后在那里进行映射
目前,我绑定到我的控制器中的EntryInputModel
,并使用AutoMapper将其映射到Entry
。如果我需要更改它,我还需要重新考虑项目中的依赖项,因为...InputModel
和...ViewModel
类目前只能用于我的Web应用程序。哪个更好?有更多方法可以解决这个问题吗?
答案 0 :(得分:1)
如果您使用SQL Server作为后端,我建议的解决方案是使ID列成为数据库上的INT IDENTITY,并使实体对象中的列不可为空。
添加新实体时,请为ID指定一些任意值,例如-1或者其他值,或者根本没有值。插入新实体时,SQL Server将自动生成实际ID(
EntityContext.AddToEntities(newEntity);
EntityContext.SaveChanges();
它将自动发送回EF,这样您就可以在插入后立即使用它:
int newEntityID = newEntity.ID;
就像魅力一样 - 至少在我的测试应用程序中: - )
答案 1 :(得分:0)
您可以生成不是由数据存储区/ EF生成的唯一ID,允许您在将对象传递到EF之前定义它们...(想想Guid的)