我在这里看过其他问题,在其他使用EF的项目中也看过,但无法弄清楚为什么在尝试使用EF创建带有视图的控制器时出现错误。
我收到的消息告诉我,它不理解Company
和PoolCar
之间的主要关系,这是一对一的关系。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无法区分哪一方是从属方。