将映射表加载为实体框架中的实体

时间:2012-10-23 13:08:47

标签: c# entity-framework mapping

这是采用代码优先方法的最新实体框架。 一个客户可以拥有多个属性:

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类中。

检索映射的正确方法是什么,而不是映射到的对象?

2 个答案:

答案 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; }

解决了我的问题。