[英]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指出的那樣,
將該連接表拖到設計器上。 您將在名為OrderProduct
的Order
上擁有一個屬性,您將能夠通過OrderProducts
屬性導航到Order
上的Products
foreach (var op in Order.OrderProducts)
{
var product = op.Product;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.