2017-05-05 149 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? –