2015-11-03 58 views
0

實體框架忽略我的外鍵並創建自己的列。我如何解決這個問題?實體框架爲外鍵創建了自己的列

我有幾類:

[Table("Entity")] 
public class Entity 
{ 
    public Entity() 
    { 
     HeavyEntities = new List<HeavyEntity>(); 
    } 

    [Key, DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
    public int EntityId { get; set; } 

    public string Name { get; set; } 

    public ICollection<HeavyEntity> HeavyEntities { get; set; } 
} 

[Table("HeavyEntity")] 
public class HeavyEntity 
{ 
    [Key, DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
    public int EntityHeavyId { get; set; } 

    public int EntityId { get; set; } 
    public virtual Entity Entity { get; set; } 

    public int? TargetEntityId { get; set; } 
    public virtual Entity TargetEntity { get; set; } 

    public Relation Relation { get; set; } 
} 

[Table("Tech")] 
public class Tech : Entity 
{ 
    public string Status { get; set; } 
} 

[Table("Company")] 
public class Company : Entity 
{ 
    public string Country { get; set; } 
} 

創建並保存實體:

var (context = new MyDbContex()) 
{ 
    var tech = new Tech 
    { 
     Name = "Tech1", 
     Status = "New", 
    }; 

    var company = new Company 
    { 
     Name = "Company1", 
     Country = "Ukraine" 
    }; 

    tech.HeavyEntities.Add(new HeavyEntity 
    { 
     Relation = Relation.AsParent, 
     TargetEntity = company, 
    }); 

    context.Techs.Add(tech); 
    context.Companies.Add(company); 

    context.SaveChanges(); 
} 

對於這個類實體框架創建如下表(HeavyEntity):

Result table

如何將外鍵映射到我的字段?

解決:

[Table("Entity")] 
public class Entity 
{ 
    public Entity() 
    { 
     HeavyEntities = new List<HeavyEntity>(); 
    } 

    [Key, DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
    public int EntityId { get; set; } 

    public string Name { get; set; } 

    [InverseProperty("Entity")] 
    public ICollection<HeavyEntity> HeavyEntities { get; set; } 
} 

[Table("HeavyEntity")] 
public class HeavyEntity 
{ 
    [Key, DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
    public int EntityHeavyId { get; set; } 

    [ForeignKey("EntityId")] 
    public int EntityId { get; set; } 
    public virtual Entity Entity { get; set; } 

    [ForeignKey("TargetEntityId")] 
    public int? TargetEntityId { get; set; } 
    public virtual Entity TargetEntity { get; set; } 

    public Relation Relation { get; set; } 
} 

回答

1

添加ForeignKey的屬性。

看到https://msdn.microsoft.com/en-us/data/jj591583#Relationships

[Table("HeavyEntity")] 
public class HeavyEntity 
{ 
[Key, DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
public int EntityHeavyId { get; set; } 

public int EntityId { get; set; } 
public virtual Entity Entity { get; set; } 

public int? TargetEntityId { get; set; } 
[ForeignKey("TargetEntityId")]  // <<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
public virtual Entity TargetEntity { get; set; } 

public Relation Relation { get; set; } 

}

+0

是的,謝謝。還需要添加InversePropery for Entity。 – christo