私は初心者ですから、コードを推測すると、 「適切なコード」の点で違反が多い。 (どんな発言を得るために喜んで...)既にデータベースに存在するエンティティを親エンティティのIcollectionに挿入して変更を保存する方法
私は3 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; }
}
を、それが値を持つproperiesだし、それから、その「ICollectionを」に一部を挿入'AgeRange'エンティティ。これはDBから取り除きます。私の意図が一定にそれらを保つためにあるよう
Violation of PRIMARY KEY constraint 'PK_AgeRanges'. Cannot insert duplicate key in object 'dbo.AgeRanges'.
The statement has been terminated.
(AgeRange PKは、意図的に文字列である:私はdbContexに新しい「年齢」を追加し、ときに私は例外を取得「のSaveChanges」実行 を(彼らはすでに存在して)すべてのヘルプは理解されるであろう
[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;
}
:ロジックベース)
は、ここでは、コードの残りの部分です。あなたは二つの異なるコンテキストを使用しているため
本当にありがとうございました! –