2016-05-20 22 views
1

多少の追加フィールドと多対多の関係があります。しかし、他の関係に適用される可能性のある多対多の関係にPhotosが追加されたので、私はそれを分離したいので、One to manyの関係を変更するだけでそれを変更できます。これは、モデル多対多に1対多の接続を追加する

public class Segment 
{ 
    public int SegmentId { get; set; } 
    public int ConnectionPointIdEnd { get; set; } 
    public string ConnectionName { get; set; } 
    public string ConnectionInformation { get; set; } 
    public string Image { get; set; } 
    public string Direction { get; set; } 
    public ICollection<ConnectionPointRoute> ConnectionPointRoutes { get; set; } 
} 
public class ConnectionPointRoute 
{ 
    public int ConnectionPointId { get; set; } 
    public int RouteId { get; set; } 
    public int SegmentId { get; set; } 
    public int Position { get; set; } 
    public ConnectionPoint ConnectionPoint { get; set; } 
    public Route Route { get; set; } 
    public Segment Segment { get; set; } 
} 

され、ModelBuilderのは、次のようになります

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

     modelBuilder.Entity<ConnectionPointRoute>() 
      .HasKey(c => new { c.ConnectionPointId, c.RouteId, c.SegmentId }); 

     modelBuilder.Entity<ConnectionPoint>() 
      .HasMany(c => c.ConnectionPointRoutes) 
      .WithRequired(x => x.ConnectionPoint) 
      .HasForeignKey(c => c.ConnectionPointId); 

     modelBuilder.Entity<Route>() 
      .HasMany(c => c.ConnectionPointRoutes) 
      .WithRequired(x => x.Route) 
      .HasForeignKey(c => c.RouteId); 

     modelBuilder.Entity<Segment>() 
      .HasMany(c => c.ConnectionPointRoutes) 
      .WithRequired(x => x.Segment) 
      .HasForeignKey(c => c.SegmentId); 
    } 

そして、これはすべてのアイテムを取得するためにうまく動作しますが、何らかの理由で、それは私が新しいルートを投稿することができません。たとえば、エラーが表示されます。

"Multiplicity constraint violated. The role 'Segment_ConnectionPointRoutes_Source' of the relationship 'InBuildingNavigator.Data.Models.Segment_ConnectionPointRoutes' has multiplicity 1 or 0..1."

答えて

0

この問題を修正しました。私は私の郵便番号でエラーがあった、私は私のケースでは全体的に多くの意味をしない完全な子オブジェクトを追加しました。

詳細な修正が必要な場合は、私に尋ねてください。

0

これまでわずか2つの以上のもの:

  1. (あなたはすでにこれを行わない場合)私は、多対多の関係のための余分なオブジェクトを使用するためにあなたをお勧めします。これにより、テーブル名や選択範囲をより詳細に制御できます。
  2. あなたのプロパティにvirtualキーワードを使用します。これはあなたのコレクションには直接必要ではありません。これにより、efは遅延ロードを実装できます。
+0

データを詳細に制御したいので、明示的な読み込みを使用することを選択しました。私は本当にあなたの最初の提案に従うことができないと言う必要があります、説明するために気を付けろ? –

+0

それは私の経験からです。たとえば、私は友人の関係を持っていた - 古典的な多対多の関係。この関係にはfriendStatus(友情が認められている)という別のプロパティがあります。すべての認知された友人を取得したいとき、これはasp.netのアイデンティティを扱うときに難しい傾向がありました。私が誤解しないで、多対多の作業を自動的に実行する方法は、経験したことがありますが、あとでカスタマイズするのが難しくなる傾向があります。 – Nils

関連する問題