2

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
}

i DB で生成された 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 に答える