2011-07-05 18 views
2

私は私のSQL Serverデータベース内の3つのテーブルがあります。これらの各テーブルも発見されたいくつかの列が含まれていポリモーフィックな関連および分割テーブル

  • 教師
  • 学生

を他の例では、例えば:

他のすべての列が異なっています。これは従来のデータベースです。私はそれを変更することはできません。私のC#のコードで

、私が持っていると思います:、役割と人の間で多型many-to-one関連です

public partial class Person 
{ 
    public string FirstName { get; set; } 
    public string Surname { get; set; } 

    public virtual ICollection<Role> Roles { get; set; } 
} 

public interface Role 
{ 
} 

public partial class Teacher : Role 
{ 
    public string School { get; set; } 
} 

public partial class Student : Role 
{ 
    public string YearLevel { get; set; } 
} 

public partial class Parent : Role 
{ 
    public string Blagh { get; set; } 
} 

私はこれが欲しい理由は、人が先生と親の両方になれるからです。

私の質問は、データベースからビジネスオブジェクトを移入するためにどの技術を使用すべきですか?

私は、Entity Framework 4.1のDbContextについて調べました。私はデータアノテーションのアプローチが好きですが、私が望むことはできますか?そうでない場合は、Fluent APIを使用できますか?

Entity Frameworkがこれを行うことができない場合は、NHibernate(属性を使用することが望ましい)、Linq-to-SQLはどうですか?

私はNHibernateが多相関連を扱うことができると知っていますが、これはここのようなエンティティ間でテーブルを分割しているところで可能ですか?

答えて

2

あなたは、エンティティフレームワークを得ることができる最も近いTPC inheritanceです:

public abstract class Person 
{ 
    public string FirstName { get; set; } 
    public string Surname { get; set; } 
} 

public partial class Teacher : Person 
{ 
    public string School { get; set; } 
} 

public partial class Student : Person 
{ 
    public string YearLevel { get; set; } 
} 

public partial class Parent : Person 
{ 
    public string Blagh { get; set; } 
} 

以上何もするので:EFは、相続またはテーブル分割せずに、同じテーブルに複数のエンティティをマッピングすることができません

  • EFは単一のナビゲーションプロパティに複数のリレーションをマップできません
  • 教師と親は常に2つの異なる関連する人ではありません。

私が何を示すことは、純粋なポリモーフィックな関連はないので、NHibernateはこれをサポートしていることを疑う(人の非決定論的マッピングに問題がまだある)が、おそらく誰かが私を驚かせるでしょう。

関連する問題