我正在做一些测试,以便使用LINQ to SQL来体验对象关系映射,并且我一直试图让多对多关系工作。为了简单起见,我假设我有一个订单类,该类拥有一系列有序的产品。如何使用LINQ to SQL映射此产品集合?
[Table(Name = "OrderTable")]
public class Order
{
[Column(IsPrimaryKey = true, IsDbGenerated = true)]
public int ID;
[Column]
public string Customer;
[Association(ThisKey = "ID", OtherKey = "ID")] // Not working
public EntitySet<Product> products = new EntitySet<Product>();
}
[Table(Name = "ProductTable")]
public class Product
{
[Column(IsPrimaryKey = true, IsDbGenerated = true)]
public int ID;
[Column]
public string Name;
[Column]
public double Price;
}
我尝试使用 EntitySet 作为容器来容纳订单的产品,但由于LINQ查询正在返回,因此无效带有空产品集合的订单对象。
PS:从This question开始,我似乎需要创建第三个类来跟踪 Order-Product 关系,但我希望找到一种方法来实现它创建另一个类。
答案 0 :(得分:3)
除了Order-Product表之外,没有办法在数据库中对此进行建模,Linq-to-SQL实体与SQL表匹配。不幸的是,这是使用Linq-to-SQL对此进行建模的唯一方法(据我所知)。
创建模型后,您可以创建一个属性来隐藏此限制,方法是右键单击实体并选择View Code(假设DBML设计器,否则只需将其添加到代码中),然后添加如下内容:
public partial class Order
{
public IEnumerable<Product> Products
{
get
{
return OrderProducts.Select(op => op.Product);
}
}
}
答案 1 :(得分:0)
正如@TheEvilPenguin指出的那样,
将该连接表拖到设计器上。您在名为Order
的{{1}}上有一个属性,您可以通过{{1}导航到OrderProduct
上的Products
属性
Order