C# EF代码优先:使用中间表将实体映射到现有数据库

C# EF代码优先:使用中间表将实体映射到现有数据库,c#,ef-code-first,code-first,entity-framework-4.1,C#,Ef Code First,Code First,Entity Framework 4.1,这是一个示例场景。我有一个由以下表格组成的现有数据库 订单,带有字段OrderId(主键,整数) 产品,带有ProductId(主键,整数)和PriceId(主键,整数)字段 OrdersProducts,带有OrderProductId(PK,int)、OrderId(FK,int)、ProductId(FK,int)、OrderingStatus(int)字段 价格带有字段PriceId(主键,整数) 所有PK都是标识 我的实体是 public class Order { [Key] p

这是一个示例场景。我有一个由以下表格组成的现有数据库

订单,带有字段OrderId(主键,整数)

产品,带有ProductId(主键,整数)和PriceId(主键,整数)字段

OrdersProducts,带有OrderProductId(PK,int)、OrderId(FK,int)、ProductId(FK,int)、OrderingStatus(int)字段

价格带有字段PriceId(主键,整数)

所有PK都是标识

我的实体是

public class Order
{
 [Key]
 public int OrderId { get; set; }
 public virtual IList<Product> Products { get; set; }
}

public class Product
{
 [Key]
 public int ProductId { get; set; }
 public string Name { get; set; }
 public int OrderingStatus { get; set; }

 public virtual Price Price { get; set;}

}

public class Price
{
 [Key]
 public int PriceId { get; set;}

}
我无法在上下文中正确地使用映射,是否有人可以在正确的方向上帮助我

实际上,我在这里遇到了两种问题,第一种是OrderingStatus到中间表的映射,第二种是连接表时遇到问题,即指定的模式无效。错误:。。。错误0019:i a类型中的每个属性名称必须是唯一的。已定义属性名称“OrdersProductsId”



您的映射将不起作用-您无法将OrderingStatus映射到您的Prodcut,因为它不在同一个表中,并且与产品没有一对一的关系。它位于具有一对多关系的单独表中。您必须将OrdersProducts作为单独的实体公开,因为您的连接表包含您需要的其他属性要使用的ant:

public class Order
{
    [Key]
    public int OrderId { get; set; }
    public virtual ICollection<ProductOrder> ProductOrders { get; set; }
}

public calss ProductOrder
{
    [Key]
    public int OrderProductId { get; set; }
    public int OrderStatus { get; set; }
    public virtual Product { get; set; }
    public virtual Order { get; set; }
}

public class Product
{
    [Key]
    public int ProductId { get; set; }
    public string Name { get; set; }
    public virtual Price Price { get; set;}
}

public class Price
{
    [Key]
    public int PriceId { get; set;}
}
公共类秩序
{
[关键]
公共int-OrderId{get;set;}
公共虚拟ICollection ProductOrders{get;set;}
}
公共卡产品订单
{
[关键]
public int OrderProductId{get;set;}
公共int OrderStatus{get;set;}
公共虚拟产品{get;set;}
公共虚拟顺序{get;set;}
}
公共类产品
{
[关键]
public int ProductId{get;set;}
公共字符串名称{get;set;}
公共虚拟价格{get;set;}
}
公共类价格
{
[关键]
public int PriceId{get;set;}
}

谢谢,我现在看清楚了,从一开始就意识到了我的问题所在。
Map(m =>
  {
    m.Properties(p => new
    {
      p.Name
    });
    m.ToTable("Products", "dbo");
  });

  Map(m =>
  {
    m.Properties(p => new
    {
      p.OrderingStatus
    });

    m.ToTable("OrdersProducts", "dbo");
  });

  HasRequired<Price>(x => x.Price)
    .WithMany()
    .Map(m => m.MapKey("PriceId"));
  ToTable("Prices", "dbo");
public class Order
{
    [Key]
    public int OrderId { get; set; }
    public virtual ICollection<ProductOrder> ProductOrders { get; set; }
}

public calss ProductOrder
{
    [Key]
    public int OrderProductId { get; set; }
    public int OrderStatus { get; set; }
    public virtual Product { get; set; }
    public virtual Order { get; set; }
}

public class Product
{
    [Key]
    public int ProductId { get; set; }
    public string Name { get; set; }
    public virtual Price Price { get; set;}
}

public class Price
{
    [Key]
    public int PriceId { get; set;}
}