2016-03-09 57 views
2

我在Asp.net mvc中遇到實體框架問題。每當向數據庫添加實體列表時,我都想獲得Id值。我怎樣才能做到這一點?如何添加實體列表以及如何獲取Id

我用這個代碼實體的列表中添加到數據庫:使用I DB生成的ID(如在MS SQL IDENTITY)

+0

您是否測試過在AddThisRange調用之後從數據庫中獲取標記,然後檢查標識是什麼? – andreasnico

+0

yes.ID在數據庫中創建。 – testStack201541

+0

這就是解決方案:) – andreasnico

回答

-1

我認爲這個問題是在這部分代碼

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 
} 

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

您選擇了Id = 0的corse的新標籤。

我使用此代碼測試這樣的:

class Program 
{ 

static void Main() 
    { 
     List<Tag> tags = new List<Tag>() { new Tag { Id = 1, Name = "Tag1" }, new Tag { Id =2, Name = "Tag2" } }; 

     var newTags = tags.Select(tagName => new Tag 
     { 

     }); 

     foreach (var tag in newTags) 
     { 
      Console.WriteLine(tag.Id); 
     } 

     Console.ReadLine(); 
    } 
} 

internal class Tag 
    { 
     public int Id { get; set; } 
     public string Name { get; set; } 
    } 
+0

您正在手動設置ID。正如OP所說,他們正在數據庫中生成。你不能在代碼中設置它們。 – andreasnico

+0

請這只是一個例子,我不再模擬創作。問題不在那裏。問題出在選擇新標籤。不要貪婪地downvote – Coding4Fun

0

我認爲,「問題」是,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 
} 
+0

什麼是GetSavedTags? – Coding4Fun

+0

這是從數據庫中獲取標籤的僞代碼。我猜想OP的代碼中存在類似的東西。 – andreasnico

+0

看到我的回答問題是在[Select(new Tag ...]。不需要從數據庫中重新加載數據 – Coding4Fun

1

試試這個,

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

相關問題