2017-05-05 224 views
0

親愛的實體專家和其他人,實體框架數據庫模型

我有以下實體,

基類個人:

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; } 

所以上面創建一個表VAT那裏VATID爲2開始與這應該是1相反,我不明白爲什麼會發生這種情況,這應該是1不是嗎?此外,在任何引用客戶&增值稅的表格中的任何地方都沒有任何參考,我如何創建一個單獨的表VAT_Customer,您有VATID &客戶ID?

這是我如何創建並插入實體客戶:

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

插入函數:

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

我已經嘗試了多種方法(EXAMPLES HERE),但我更喜歡TPT方式製得具有對實體之間的任何實體或關係的單獨看法。我做錯了什麼,我將如何達到預期的效果?讓我知道我是否可以澄清任何事情。提前感謝您的任何幫助或建議!

親切的問候!

回答

1

你ForeignKey的位置應該是這個樣子,如果你想有1:1間的關係:

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

在ForeignKey的名稱是一樣的類。

希望這可以幫助

+0

你也不必在還原類(客戶),,你可以從客戶訪問它直接 –

+0

如果您的客戶比1Vat更多,,添加到您的客戶類: public virtual List VATS {get;組; } –

+0

客戶只能擁有1個增值稅nr,所以它就像您說的1個1一樣1.我做了以下操作:**將客戶從增值稅等級中刪除:** - 使用增值稅1而不是2(偉大!) - 在Customer表中增加一個列名稱VAT_VATID(GREAT!) [ForeignKey(「VAT」)] public virtual int VATID {get;組; } 公共虛擬增值稅VAT {get;組; } 這給了我一個客戶表中的VATID列,直到現在,這是我見過的最好的結果。有沒有辦法將它們分開映射到一個表格,比如CUSTOMER_VAT,那裏有VATID和CUSTOMERID? –