如何添加实体列表以及如何获取Id

时间:2016-03-09 11:00:51

标签: c# entity-framework entity addrange

我在Asp.net mvc中遇到了Entity Framework的问题。每当我向数据库添加实体列表时,我想获取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
}

我使用DB生成的ID(如MS SQL中的IDENTITY)

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:0)

试试这个,

Sub dural2()
    Dim Cnt&, RowCnt&
    RowCnt = Cells.Find("*", , , , , xlPrevious).Row
    For Cnt = RowCnt To 1 Step -1
        If Evaluate("=COUNTIF(B" & Cnt & ":G" & Cnt & ",0)") = 6 Then
            Rows(Cnt).Delete
        End If
    Next Cnt
End Sub

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

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();

您可以阅读本文创建方法的内容https://msdn.microsoft.com/en-us/library/gg696136(v=vs.113).aspx