EntityFramework Code First添加不必要的外键

时间:2017-08-31 12:47:43

标签: entity-framework ef-code-first

我的Pocos中有两个课程

public class Listing
{
    public int ListingId { get; set; }

    [ForeignKey("Seller")]
    public int SellerId { get; set; }
    public virtual User Seller { get; set; }

    [Required]
    public string ItemCategory { get; set; }

    [Required]
    public string ItemName { get; set; }

    [Required]
    public decimal Cost { get; set; }

    public DateTime DateOfPublish { get; set; }

    [Required]
    public bool SaleStatus { get; set; }

    [ForeignKey("Buyer")]
    public Nullable<int> BuyerId { get; set; }
    public virtual User Buyer { get; set; }
}

public class User
{
    public int UserId { get; set; }

    [Required]
    public string FirstName { get; set; }

    [Required]
    public string SecondName { get; set; }

    [Required]
    public string Email { get; set; }

    [Required]
    public string Password { get; set; }

    public string PhoneNumber { get; set; }

    public string Address { get; set; }

    public virtual ICollection<Listing> Listings { get; set; }

当我将其迁移到数据库时,我得到了BuyerId,SellerId和User_UserId

User_UserId列完全没必要,但我不知道如何处理我的代码才能将其删除。

1 个答案:

答案 0 :(得分:1)

Seller类中的

BuyerListing导航属性定义两个多对一关系。但是Listings类中有单个集合导航属性User。由于EF不知道它应该映射到哪两个关系,它只是认为它是第三个​​关系,没有相应的引用导航属性,并且默认为约定FK名称User_UserId

您需要将Listings属性映射到其中一个参考导航属性。一种方法是使用InverseProperty属性。或者将其替换为两个集合导航属性,并将它们映射到相应的参考导航属性。

很快,替换

public virtual ICollection<Listing> Listings { get; set; }

[InverseProperty("Seller")]
public virtual ICollection<Listing> SellerListings { get; set; }
[InverseProperty("Buyer")]
public virtual ICollection<Listing> BuyerListings { get; set; }