2

我当前的设置
我有一个带有一些属性的实体对象,其中一个int Id. 为了与数据库通信,我创建了一个存储库,其中包括以下方法:

public int Add(TEntity entity)
{
    ObjectSet.AddObject(entity);
    return entity.Id;
}

(它是一个通用存储库,需要它TEntity是 a class,并且它实现了IEntity,这只是一个带有int Id属性的接口。)

我的问题:
现在,当我想创建一个新实体以添加到存储库时,我需要给它一个 id。但是,这不允许 EF 自动为我生成 id,因为它已经有一个值。

可能的解决方案:
我只能想到这两种可能性。

  1. 使Id属性可以为空
  2. 而是将 an 传递EntryInputModel给存储库,然后在那里进行映射。
    目前我EntryInputModel在我的控制器中绑定,并将其映射到Entry使用AutoMapper。如果我需要更改它,我还需要重新考虑我的项目中的依赖关系,因为...InputModel...ViewModel类目前仅可用于我的 Web 应用程序。

哪个更可取?有没有更多的方法来解决这个问题?

4

2 回答 2

1

如果您使用 SQL Server 作为后端,我推荐的解决方案是将 ID 列设置为数据库上的 INT IDENTITY,并在实体对象中设置一个不可为空的列。

添加新实体时,为 ID 分配一些任意值,例如 -1 或其他值,或者根本没有值,甚至。插入新实体时,SQL Server 将自动生成实际 ID (

EntityContext.AddToEntities(newEntity);
EntityContext.SaveChanges();

它会自动返回给 EF,因此一旦插入,您就可以立即使用它:

int newEntityID = newEntity.ID;

像魅力一样工作 - 至少在我的测试应用程序中:-)

于 2010-04-05T15:06:28.607 回答
0

您可以生成不是由数据存储区/EF 生成的唯一 id,允许您在将对象传递给 EF 之前定义它们...(想想 Guid 的)

于 2010-04-05T15:02:30.610 回答