2017-03-08 3 views
0

私は非常に単純なオブジェクト構造を持っています...多数の子を持つ親オブジェクト...しかし、それらの子の1つへの参照もあります。データベースが作成され、私が期待するどのように見えるEntity Framework - 親は子と1つの子への参照を持っています

public class History 
{ 
    [Key] 
    public int Id { get; set; } 

    public virtual HistoryEvent ActiveEvent { get; set; } 

    public virtual List<HistoryEvent> Events { get; set; } 
} 

public class HistoryEvent 
{ 
    [Key] 
    public int Id { get; set; } 

    public string Name { get; set; } 
} 

    static void Main(string[] args) 
    { 
     using (var context = new EfTest()) 
     { 
      var history = new History 
      { 
       Events = new List<HistoryEvent> 
       { 
        new HistoryEvent { Name = "a" }, 
        new HistoryEvent { Name = "b" }, 
        new HistoryEvent { Name = "c" } 
       } 
      }; 

      history.ActiveEvent = history.Events.First(); 

      context.History.Add(history); 

      context.SaveChanges(); 
     } 
    } 

...

Tables

しかし、それは...内部例外がこれを提供します保存されません...

Exception

助けてください!

答えて

0

ちょうど、他の前に1を挿入し、この混乱を解決するために

(間違ったなら、私を修正)これはEFが最初に保存するために、どのオブジェクトについて混同してはなり,,円形参照して複雑なオブジェクトを保存することはできません

(これは、より多くの制御のためにあなたを助けるかもしれない)手動で外部キーを含めるようにモデルを変更する必要が上記のdoesnの `t作業する場合は、この

 var history = new History 
     { 
      Events = new List<HistoryEvent> 
      { 
       new HistoryEvent { Name = "a" }, 
       new HistoryEvent { Name = "b" }, 
       new HistoryEvent { Name = "c" } 
      } 
     }; 

     //history.ActiveEvent = history.Events.First(); 

     context.History.Add(history); 
     context.SaveChanges();//now every object has an Id 

     history.ActiveEvent = history.Events.First(); 
     context.SaveChanges(); 

をやってみてください空の履歴イベントとその後

public class History 
{ 
[Key] 
public int Id { get; set; } 
public int? ActiveEventId { get; set; } 
[ForeignKey("ActiveEventId")] 
public virtual HistoryEvent ActiveEvent { get; set; } 

public virtual List<HistoryEvent> Events { get; set; } 
} 
HistoryEventクラスの

と同じ

public class HistoryEvent 
{ 
    [Key] 
    public int Id { get; set; } 

    public string Name { get; set; } 
    public int? HistoryId {get; set; } 
    [ForeignKey("HistoryId ")] 
    public virtual History history { get; set; } 
} 

  1. インサート履歴

  2. var Events = new List<HistoryEvent> { 
          new HistoryEvent { Name = "a" ,HistoryId = history.Id}, 
          new HistoryEvent { Name = "b" ,HistoryId = history.Id}, 
          new HistoryEvent { Name = "c" ,HistoryId = history.Id} 
          } 
    
    ような履歴イベントに手動history.Idを追加
  3. これは

    を助けアクティブイベントIDを取得し、履歴

の希望を更新するイベント

  • を保存

  • 関連する問題