这是采用代码优先方法的最新实体框架。 一个客户可以拥有多个属性:
public class Customer
{
[Key]
public int Id { get; set; }
public virtual List<CustomerToPropertyMapping> PropertyIds { get; set; }
}
[Table("CustomerToProperty")]
public class CustomerToPropertyMapping
{
[Key, Column(Order = 1)]
public int PropertyId { get; set; }
}
当我加载数据时,一切正常。当我试图保存客户时,我得到了
保存不公开外键的实体时发生错误 他们关系的属性。 EntityEntries属性将 返回null,因为无法将单个实体标识为源 例外。可以在保存时处理异常 通过在实体类型中公开外键属性更容易。看到 InnerException以获取详细信息。
即使我有
,也会发生同样的事情[Key, Column(Order = 0)]
CustomerId
在CustomerToPropertyMapping类中。
检索映射的正确方法是什么,而不是映射到的对象?
答案 0 :(得分:0)
您应该在客户类
中设置主键[Table("CUstomerTable")]
public class Customer
{
[Key]
public int Id { get; set; }
public virtual List<CustomerToPropertyMapping> PropertyIds { get; set; }
}
[Table("CustomerToProperty")]
public class CustomerToPropertyMapping
{
[Key]
public int PropertyId { get; set; }
[Column("Customer_ID")]
public long CustomerId{ get; set; }
[ForeignKey("CustomerId")]
public Customer Customer{ get; set; }
}
答案 1 :(得分:0)
保持
[Key, Column(Order = 0)]
CustomerId
在CustomerToPropertyMapping
并更改
public virtual List<CustomerToPropertyMapping> PropertyIds { get; set; }
到
[ForeignKey("CustomerId")]
public virtual List<CustomerToPropertyMapping> PropertyIds { get; set; }
解决了我的问题。