C# EF代码优先:使用中间表将实体映射到现有数据库
这是一个示例场景。我有一个由以下表格组成的现有数据库 订单,带有字段OrderId(主键,整数) 产品,带有ProductId(主键,整数)和PriceId(主键,整数)字段 OrdersProducts,带有OrderProductId(PK,int)、OrderId(FK,int)、ProductId(FK,int)、OrderingStatus(int)字段 价格带有字段PriceId(主键,整数) 所有PK都是标识 我的实体是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
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;}
}