我在这里看过其他问题,在其他使用EF的项目中也看过,但无法弄清楚为什么在尝试使用EF创建带有视图的控制器时出现错误。

我收到的消息告诉我,它不理解CompanyPoolCar之间的主要关系,这是一对一的关系。

Unable to determine the principal end of association between the types PoolCar and Company.

公司1 1泳池车1 *汽车分配

我已经在依赖表(PoolCar)上分配了外键,但是它仍然抛出相同的错误。

我错过了什么?

[Table("Company")]
    public class Company
    {
        [Key]
        public int companyId { get; set; }
        public string companyName { get; set; }
        // navigation property
        public virtual PoolCar poolCar { get; set; }
    }
    [Table("PoolCar")]
    public class PoolCar
    {
        [Key]
        public int poolCarId { get; set; }
        public int companyId { get; set; }
        [ForeignKey("companyId")]
        public Company company { get; set; }
        public string poolCarName { get; set; }
        // navigation property
        public virtual IList<CarAllocation> carAllocations { get; set; }
    }
    [Table("CarAllocation")]
    public class CarAllocation
    {
        [Key]
        public int carAllocationId { get; set; }
        public int poolCarId { get; set; }
        [ForeignKey("poolCarId")]
        public PoolCar poolCar { get; set; }
        public string allocationName { get; set; }
    }

最佳答案

我想我以前可能曾遇到过此问题,并认为这可能是EF中的错误。显然,可以通过在fluent API中配置关系来解决此问题,请参阅@vinodh答案,但是如果您坚持使用数据注释,则可以将外键属性放在poolCarId属性上。

[Table("PoolCar")]
public class PoolCar
{
    [Key, ForeignKey("company")]
    public int poolCarId { get; set; }
    public int companyId { get; set; }
    public Company company { get; set; }
    public string poolCarName { get; set; }
    // navigation property
    public virtual IList<CarAllocation> carAllocations { get; set; }
}


还要注意的是,如果关系的主体没有导航属性,即从public virtual PoolCar poolCar { get; set; }模型中删除了Company,则代码将起作用。

我确实相信这是一个错误,因为当您显式声明外键时,我认为没有理由EF无法区分哪一方是从属方。

10-06 03:19