这是一个示例场景。我有一个由下表组成的现有数据库;
订单,字段为 OrderId (PK,int)
产品,字段 ProductId (PK,int), PriceId (FK,int)
OrdersProducts ,包含字段 OrderProductId (PK,int), OrderId (FK,int), ProductId (FK,int), OrderingStatus (int)
字段 PriceId (PK,int)价格
所有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;}
}
这是我的映射; 订购;
HasMany<Product>(x => x.Products)
.WithMany()
.Map(m =>
{
m.MapLeftKey("OrderId");
m.MapRightKey("ProductId");
m.ToTable("OrdersProducts", "dbo");
});
产品;
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");
我无法在上下文中找到我的映射,有没有人可以帮助我朝正确的方向发展。
我实际上有两种麻烦,首先是将OrderingStatus映射到我的中间表,其次我连接我的表时遇到问题,即'指定的Schema无效。错误:...错误0019:i类型中的每个属性名称必须是唯一的。属性名称''OrdersProductsId'已经定义。'
答案 0 :(得分:2)
您的映射不起作用 - 您无法将OrderingStatus映射到Prodcut,因为它不在同一个表中,并且与产品的一对一关系无关。它位于具有一对多关系的单独表中。您必须将OrdersProducts公开为单独的实体,因为您的联结表包含您要使用的其他属性:
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;}
}