2012-03-19 10 views
2

私はこのことをどのように検索するか分かりませんので、私は説明しようとしています。複数の列を使用してモデルを他のモデルにマッピングする

私は2つのモデルがありますがあり、それらの両方によりますが、これらは重要なビットです

public class Destinations 
{ 
    public int DestinationsID { get; set; } 
    public virtual Navigation Navigation { get; set; } 
} 

public class Navigation 
{ 
    public int NavigationID { get; set; } 
    public string ParameterName { get; set; } 
    public int ParameterValue { get; set; } 
    public string FriendlyURL { get; set; } 
} 

を。私はDestinationを保存するときにNavigation ParameterNameをDestinationに設定し、ParameterValueをDestinationIDに設定します。

ナビゲーションが目的地に依存しないため、目的地をナビゲーションにマップすることはできません。そのモデルのIDとしてParameterNameとParameterValueのいずれかのモデルを持つことができます(または、これらのモデルの両方が、ページにのみ関連し、追加のモデルではないため、nullでもかまいません)。

したがって、単一の目的地を表示しているとき、またはリストをループしているときは、Navigation.FriendlyURLを取得する必要があります。これが私が公開仮想ナビゲーションナビゲーション{get;セット; }。私のマッピングクラスでは、DestinationのParameterNameとDestinations.DestinationIDのParameterValueに従ってナビゲーションを取得する必要があります。これは私が完全に立ち往生したところです。すべてのヘルプをいただければ幸いです

 this.HasRequired(d => d.Navigation) 
      .WithRequiredDependent(WHAT GOES HERE) 
      .Map(WHAT GOES HERE) 
      .WillCascadeOnDelete(false); 

私はこのようなものが必要と仮定しています。

答えて

0

あなたはDestinationsNavigationプロパティをマッピングする場合は、あなたがこの関係をマッピングすることはできませんが、あなたは、マニュアル関係フィックスアップの両方を取得するクエリを構築することができ、この

this.HasRequired(d => d.Navigation) 
     .WithMany() 
     .WillCascadeOnDelete(false); 

編集 ような何かを試すことができます。

var query = (from d in db.Destinations 
     join n in db.Navigations on d.DestinationsID equals n.ParameterValue 
       where n.ParameterName == "Destination" 
     select new { d, n }).ToList(); 

// Display joined groups. 
foreach (var group in query) 
{ 
    group.d.Navigation = group.n; 
} 
+0

この関係は1対1です。また、foriegnkeyはありませんが、ナビゲーションのParameterName(この場合は常に「Destination」)フィールドとParameterValue(Destinationsの主キー)フィールドを使用してマッピングされます。 –

+0

@DreadPeterその場合、マップすることはできません。 One-to-Oneは共有PKを使用します。 – Eranga

+0

OK、そうですね。 List destinations = db.Destinations.Where(d => d.Active == true && d.DestinationTypeValue == dd.DestinationTypeValue).ToList(); ビューにモデルを介してアクセスできる適切なナビゲーションアイテムを追加するために「Include」を付けることは可能ですか? ViewModelを作成しなければならない場合でも(これはおそらく助けが必要です)。 –

関連する問題