2012-03-16 11 views
0

は、次のスキーマは私ではない、私は非表示にしたり、住民プロパティを定義することはできませんことをとにかく

class Person{ 
    public int Id {get;set;} 
    public virtual ICollection<Province> Provinces {get;set;} 
} 

class Province{ 
public int Id {get;set;} 
public virtual ICollection<Person> Residents {get;set;} 
} 

ありを想定依存エンティティのナビゲーションプロパティを持つことができますか?アプリケーションの文脈では意味をなさないが、私はコードファーストスキーマに適合するためにDTOに譲歩しているように感じている。すなわち、私は州に属する人々を得ることを望んでいません。 DBMLのある通常のEFでは、これを達成するためにナビゲーションプロパティを削除することができました。

私はfluentAPIドキュメントを見ており、状況をカバーするようなものは見つけられません。

私はEntity poco DTOをドメインクラスにマッピングする必要がありますが、私は怠け者であり、それを避けることができるかどうかを見ています。

[編集] 私はこれで解決することができましたが、あなたは私の貧しいポコに何をしましたか?

文脈で次に
class Province{ 
    public int Id {get;set;} 
    protected virtual ICollection<Person> Residents {get;set;} 

    internal class ProvinceMapping : EntityConfiguration<Province> 
    { 
      public ProvinceMapping() 
      { 
       HasMany(p => p.Residents); 
      } 
    } 

protect void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Configuration.Add(new Province.ProvinceMapping()); 
} 
+0

"* DBMLを使った通常のEFでは、これを達成するためにナビゲーションプロパティを削除することができました。*" Code-Firstでは同じことができます: 'Providence'クラスからコレクションプロパティを削除するだけです。 – Slauma

+0

ええ、申し訳ありません私は現時点で使用しているモデルから言い換えていましたが、これは実際には多種多様な関係です。私は質問 – Dylan

答えて

1

は1つだけのナビゲーションプロパティとのマッピングを作成することができます:パラメータなしのWithMany()を使用して

class Person 
{ 
    public int Id {get;set;} 
    public virtual ICollection<Province> Provinces {get;set;} 
} 

class Province 
{ 
    public int Id {get;set;} 
} 

public class PersonMapping : EntityConfiguration<Person> 
{ 
    public PersonMapping() 
    { 
     this.HasMany(p => p.Provinces) 
      .WithMany() 
      .Map(m => 
      { 
       m.MapLeftKey("PersonId"); 
       m.MapRightKey("ProvinceId"); 
       m.ToTable("PersonProvinces"); 
      }); 
    } 
} 

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Configuration.Add(new PersonMapping()); 
} 

はここで重要です。それは関係が多対多であるが、一方の端はモデル内のナビゲーションコレクションとして公開されていないことをEFに伝えます。

+0

を魅力的な感謝のように更新しました。私はテーブル名とマッピングについて気にしないので、OnModelCreatingで次のものを使用しましたが、別のマッピングクラスはまったく必要ありませんでした。 modelBuilder.Entity ().HasMany(p => p.Provinces).WithMany(); – Dylan

関連する問題