我是新手,所以我想在我要提交的代碼中,它將會是「正確的代碼」方面存在很多違規行爲。 (很高興得到任何言論。)如何將已經存在於db中的實體插入到父實體的Icollection中,並保存更改
我有三個entites的:
public class Person
{
public int PersonId { get; set; }
public int AgeId { get; set; }
...//some properties
}
public class Age
{
public int AgeId { get; set;}
public int PersonsId { get; set; }
...//some properties
public virtual ICollection<AgeRange> AgeRanges {get; set;}
}
public class AgeRange
{
public string AgeRangeId { get; set; }
public string Value { get; set; }
ICollection<Age> Ages { get; set; }
}
我創建了一個新的「時代」的實體,將其與價值性的判定,然後,將其「ICollection的」一些'AgeRange'實體,我從數據庫中提取出來。 (它們已經存在) 我新的「年齡」添加到dbContex,當執行「的SaveChanges」我得到異常:
Violation of PRIMARY KEY constraint 'PK_AgeRanges'. Cannot insert duplicate key in object 'dbo.AgeRanges'.
The statement has been terminated.
(AgeRange PK是有意的字符串,因爲我的目的是讓他們不斷上這裏的邏輯基礎)
是代碼的其餘部分:
[HttpPost]
public ActionResult AddPerson(AddPersonViewModel vm)
{
if (ModelState.IsValid)
{
Services services = new Services();
Age age = services.GetAgeEntity(vm.Ages);
db.Ages.Add(age);
db.SaveChanges(); //exception apears here.
........
}
public class Services
{
ModelContext db;
public Services()
{
db = new ModelContext();
}
public Age GetAgeEntity(string[] ages)
{
Age age = new Age();
//some more code...
age.AgeRanges = GetAgeRanges(ages);
return age;
}
}
ICollection<AgeRange> GetAgeRanges(string[] ages)
{
Age age = new Age();
age.AgeRanges = new List<AgeRange>();
foreach (string item in ages)
{
var ageRange = db.AgeRanges.Find(item);
age.AgeRanges.Add(ageRange);
}
return age.AgeRanges;
}
任何幫助將不勝感激。
它的幫助,非常感謝你! – 2012-03-22 19:57:20