簡體   English   中英

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

[英]How to map a collection of objects using LINQ to SQL?

我正在做一些測試,以便使用LINQ to SQL來體驗對象關系映射,並且我一直試圖讓多對多關系工作。 為了簡單起見,假設我有一個Order類,它擁有一系列已訂購的產品 如何使用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作為容器來保存Order產品,但它不起作用,因為LINQ查詢返回帶有空產品集合的Order對象。

PS:From 這個問題似乎我需要創建一個第三類來跟蹤Order-Product關系,但我希望找到一種方法來做到這一點,而不必創建另一個類。

除了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);
        }
    }
}

正如@TheEvilPenguin指出的那樣,

  • LINQ-to-SQL將類映射到表
  • 您需要一個OrderProduct表來促進數據庫中的這么多關系
  • 因此,LINQ-to-SQL也需要映射該表。

將該連接表拖到設計器上。 您將在名為OrderProductOrder上擁有一個屬性,您將能夠通過OrderProducts屬性導航到Order上的Products

foreach (var op in Order.OrderProducts)
{
    var product = op.Product;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM