2

我在 Asp.net mvc 中遇到实体框架问题。每当我将实体列表添加到数据库时,我都想获取 Id 值。我怎样才能做到这一点?

我使用此代码将实体列表添加到数据库:

public IEnumerable<TEntity> AddThisRange<TEntity>(IEnumerable<TEntity> entities) where TEntity : class
{
  return ((DbSet<TEntity>)this.Set<TEntity>()).AddRange(entities);
}


var Tags = _uow.AddThisRange(newTags.Select(tagName => new Tag
{
 //set properties
}));

 _uow.SaveAllChanges();

foreach (var tag in Tags)
{
   var id = tag.Id;// id always is 0
}

我使用数据库生成的 ID(如 MS SQL 中的 IDENTITY)

4

2 回答 2

2

我认为“问题”是 id 是在数据库中生成的。您必须先保存标签,然后再次获取它们,然后才能在代码中使用它们的 id。

像这样的东西:

public IEnumerable<TEntity> AddThisRange<TEntity>(IEnumerable<TEntity> entities) where TEntity : class
{
  return ((DbSet<TEntity>)this.Set<TEntity>()).AddRange(entities);
}


var Tags = _uow.AddThisRange(newTags.Select(tagName => new Tag
{
 //set properties
}));

 _uow.SaveAllChanges();

//Pseudocode:
var savedTags = _uow.GetSavedTags(newTags);

foreach (var tag in savedTags)
{
   var id = tag.Id;// id will not be 0 anymore
}
于 2016-03-09T11:34:15.677 回答
0

尝试这个,

public TEntity Create<TEntity>()
{
   return ((DbSet<TEntity>)this.Set<TEntity>()).Create();
}

var listOfEntities =new List<Tag>();
foreach (var d in newTags)
{
    var entity = _uow.Create<Tag>();
    //set properties        
    //entity.prop=""
    listOfEntities.Add(entity);
}
_uow.AddThisRange(listOfEntities);
_uow.SaveAllChanges();

然后您可以看到列表中已设置的 Id 值

foreach (var tag in listOfEntities)
{
   var id = tag.Id;
}

你可以阅读这篇文章什么创建方法是做什么https://msdn.microsoft.com/en-us/library/gg696136(v=vs.113).aspx

于 2016-03-09T12:19:44.747 回答