2011-01-08 50 views
0

相關的實體我有簡單的映射:LINQ的不插入在插入

 [Table(Name="Person")] 
     public class Person 
     { 
      private int id; 
      private int state_id; 

      private EntityRef<PersonState> state = new EntityRef<PersonState>(); 

      [Column(IsPrimaryKey = true, Storage = "id", Name="id", 
        IsDbGenerated = true, CanBeNull = false)] 
      public int ID 
      { 
       get { return id; } 
       set { id = value; } 
      } 

      [Column(Storage="state_id", Name="state_id")] 
      public int StateID 
      { 
       get{ return state_id;} 
       set{ state_id = value;} 
      } 

      [Association(Storage = "state", ThisKey = "StateID", IsForeignKey=true)] 
      public PersonState State 
      { 
       get { return state.Entity; } 
       set { state.Entity = value; } 
      } 
     } 

    [Table(Name = "PersonState")] 
    public class PersonState 
    { 
     private int id; 
     private State state; 

     [Column(Name="id", Storage="id", IsDbGenerated=true, IsPrimaryKey=true)] 
     public int ID 
     { 
      get { return id; } 
      set { id = value; } 
     } 

     [Column(Name = "date", Storage = "date")] 
     public DateTime Date 
     { 
      get { return date; } 
      set { date = value; } 
     } 

     [Column(Name = "type", Storage = "state")] 
     public State State 
     { 
      get { return state; } 
      set { state = value; } 
     } 
    } 

我用這個代碼中插入新的人與默認狀態:

private static Person NewPerson() 
{ 
    Person p = new Person(); 
    p.State = DefaultState(p); 

    return p; 
} 

private static PersonState DefaultState() 
{ 
    PersonState state = new PersonState(); 

    state.Date = DateTime.Now; 
    state.State = State.NotNotified; 
    state.Comment = "Default State!"; 

    return state; 
} 

Leater代碼:

db.Persons.InsertOnSubmit(NewPerson()); 
db.SubmitChanges(); 

在數據庫(sqlite)中,我有所有新人,但所有人的state_id都設置爲0,並且PersonState表爲空。爲什麼Linq沒有將任何狀態對象插入數據庫?

+0

你是什麼樣的LINQ? LINQ to SQL? LINQ to Entities? – 2011-01-08 16:42:57

回答

0

這是因爲您沒有告訴它將更改插入到PersonState表中。我認爲讓你的實體鏈接在一起會自動發生,但你可能需要嘗試這樣的事情:

Person p = NewPerson(); 
db.Person.InsertOnSubmit(p); 
if (p.State != null) 
{ 
db.PersonState.InsertOnSubmit(p.State); 
} 
db.SubmitChanges();