2017-05-05 17 views
0

親愛なるエンティティの専門家など、Entity Frameworkのデータベースモデル

I持っている以下のエンティティ、

基本クラス個人:

public abstract class Individual 
    { 
     [Key] 
     public int IndividualID { get; set; } 
     ... other properties 
    } 

ヨギ:

[Table("Yogis")] 
    public class Yogi : Individual 
    { 
     public string Firstname { get; set; } 
     public string Lastname { get; set; } 
     public DateTime Birthdate { get; set; } 
    } 

カスタマー:

[Table("Customers")] 
public class Customer : Individual 
{ 
    public string Name { get; set; } 

    [ForeignKey("VATID")] // tried with and without 
    public virtual VAT VAT { get; set; } 
} 

VAT:

public class VAT 
{ 
    [Key] 
    public int VATID { get; set; }  

    [Required] 
    public virtual Customer VATHolder { get; set; } 
    ... other properties 
} 

DbContext:

public DbSet<Individual> Individuals { get; set; } 
    public DbSet<VAT> VATS { get; set; } 

したがって、上記のはVATIDがどので開始する2があるテーブルVATは1でなければなら作成します代わりに、私はなぜこれが起こるか理解していない、これは1ではないでしょうか?また、お客様の& VATを参照するテーブルはどこにも参照がありません。どのようにVATID & CustomerIDを持つ別のテーブルVAT_Customerを作成できますか?

これは私が作成したエンティティの顧客を挿入する方法である:

 VAT vat = new VAT("123456789"); 
     DataBaseHandler.InsertIndividual(new Customer("Customer name", vat,...)); 

挿入機能:私はいくつかの方法(EXAMPLES HERE)を試してみました

public static void InsertIndividual(Individual individual) 
    { 
     using (MyDbContext ctx = new MyDbContext()) 
     {    
       ctx.Individuals.Add(individual);  
       ctx.SaveChanges();          
     } 
    } 

しかし、私は持つ、TPTの道を好みます任意のエンティティまたはエンティティ間の関係の別個のビュー。私は間違って何をしていますか、どうすれば希望の結果を達成できますか?私が何かを明確にすることができるかどうかを教えてください。助けや提案をいただき、ありがとうございます。

大切にしてください!

答えて

1

あなたは1持っているしたい場合はあなたのForeignKeyの配置は次のようになります。1関係:

enter code here 
[ForeignKey("VAT")] 
public virtual int VATId { get; set; } 
public virtual VAT VAT { get; set; } 

名前のForeignKeyでは、あなたのクラスと同じです。これは、あなたが顧客からアクセスでき,,また

+0

はあなたがバットクラスで(顧客)を必要としないことができます

希望ダイレクト –

+0

顧客が1Vat以上のものを持っている場合,,あなたの顧客クラスにこれを追加します。 公開バーチャルリスト VATS {get;セット; } –

+0

お客様はVAT番号が1つしかないので、VATクラスからお客様を削除してください。** - VAT 1を2ではなくVAT 1にします(偉大!) - 顧客テーブルに列名を追加します。VAT_VATID(偉大!) [ForeignKey( "VAT")] public virtual int VATID {get;セット; } パブリック仮想VAT VAT {取得;セット; } これは今までのところ私が見た最良の結果であるCustomerテーブルのVATID列を返します。VATIDとCUSTOMERIDがあるCUSTOMER_VATのように、テーブルにそれらを別々にマップする方法はありますか? –