2011-10-31 1 views
1

以下は既存レコードの保存ルーチンです。これには何が問題なのですか?私は使用していますindependent associationEF 4.1で独立アソシエーション方式を使用している場合、ナビゲーションプロパティは保存されません

しかし、エラーは発生しませんが、PersonテーブルのCountry_CountryIdフィールドは変更されず、その他のものはすべて正しく保存されます。次のコード/アプローチで何が間違っていますか?

public JsonResult SaveUpdate(Person p) 
{ 
    p.Country = new Country { CountryId = new Guid("EF0CD98E-7138-4757-866E-ADC3C8D216DA") }; 

    using (var db = new TheDbContext()) 
    { 
     db.Entry(p).State = System.Data.EntityState.Modified;     
     db.SaveChanges();  
    } 

} 

ここに私のマッパーです:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    base.OnModelCreating(modelBuilder); 

    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 

    modelBuilder.Entity<Person>().HasRequired(x => x.Country) 
     .WithMany(x => x.Persons) 
     .Map(x => x.MapKey("Country_CountryId")); 

    modelBuilder.Entity<Person>().Property(x => x.RowVersion).IsRowVersion(); 


    modelBuilder.Entity<Country>().HasKey(x => x.CountryId); 

} 

は、ここに私のモデルです:

public class Country 
{ 
    public virtual Guid CountryId { get; set; } 

    public virtual string CountryCode { get; set; } 
    public virtual string CountryName { get; set; } 

    public virtual IList<Person> Persons { get; set; } 
} 


public class Person 
{ 
    public virtual Guid PersonId { get; set; } 
    public virtual string Username { get; set; } 

    public virtual string Firstname { get; set; } 
    public virtual string Lastname { get; set; } 
    public virtual byte[] RowVersion { get; set; } 


    public virtual Country Country { get; set; } 
} 

答えて

1

は、代わりにこれを使用し、それが動作します:

public JsonResult SaveUpdate(Person p) 
{ 
    var country = new Country { CountryId = new Guid("EF0CD98E-7138-4757-866E-ADC3C8D216DA") }; 

    using (var db = new TheDbContext()) 
    { 
     db.People.Attach(p); 
     db.Countries.Attach(country); 
     db.Entry(p).State = System.Data.EntityState.Modified;     
     p.Country = country; 
     db.SaveChanges();  
    } 
} 

独立した団体があるため、特別な注意が必要です各協会自体には設定が必要な状態。

+0

ありがとうございます。両方のエンティティを接続する必要がありますか?コードは、国のエンティティのみを添付してもOKです。 – Hao

+0

あなたは必要ありません。これは隠された振る舞いがなければ、はるかに説明的です。 –

関連する問題