如何使用LINQ to SQL映射对象集合?

时间:2012-05-14 00:40:03

标签: c# linq-to-sql orm

我正在做一些测试,以便使用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 关系,但我希望找到一种方法来实现它创建另一个类。

2 个答案:

答案 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指出的那样,

  • LINQ-to-SQL将类映射到表
  • 您需要一个OrderProduct表来促进数据库中的这么多关系
  • 因此,LINQ-to-SQL也需要映射该表。

将该连接表拖到设计器上。您在名为Order的{​​{1}}上有一个属性,您可以通过{{1}导航到OrderProduct上的Products属性

Order