2010-06-14 122 views
1

在我的模型我有這些實體:如何將LINQ EntitySet映射到屬性setter中的List屬性?

public interface IOrder 
{ 
    string Name {get;set;} 
    List<IProduct> OrderedProducts {get;set;} 
} 

public interface IProduct {} 

在局部類由LINQ到SQL我對我的實體屬性,這些屬性映射產生:

public partial class Order : IOrder 
{ 
    List<IProduct> OrderedProducts 
    { 
     get { return this.L2SQLProducts.Cast<IProduct>.ToList(); } 
     set { this.L2SQLProducts = ??? } 
    } 
} 

應該如何制定者是什麼樣子?

編輯:這樣做的目的是讓接口,我可以MOCK單元測試或更改LINQ到SQL到另一個DAL。

+0

「Order」類中屬性的名稱和類型是什麼? – SteadyEddi 2010-06-14 20:34:46

+0

我更正了代碼 – jlp 2010-06-14 21:31:39

回答

1

的EntitySet的實現IList因此而不是派生List實例處理,爲什麼不使用接口的IList和乾脆直接分配給它,如:

public interface IOrder 
{ 
    string Name {get;set;} 
    IList<IProduct> OrderedProducts {get;set;} 
} 

或者,你可以實例化一個實體集,和將列表中的對象複製到該實體集。這可能會有其他的後果。

List<IProduct> OrderedProducts 
    { 
     get { return this.L2SQLProducts.Cast<IProduct>.ToList(); } 
     set { 
      this.L2SQLProducts = new EntitySet<IProduct>(); 
      foreach (var entry in value) 
       this.L2SQLProducts.Add(entry); 
     } 
    } 

HTH。

+0

您能否提供代碼示例? – jlp 2010-06-15 08:17:44

+0

更新了帖子。 – 2010-06-15 11:51:25

2

汗了...... 這樣不怕性能問題嗎 如果我這樣編碼呢

var a = xx.OrderedProducts[0]; 
var b = xx.OrderedProducts[1]; 

這樣不是要該問了兩次數據庫嗎

翻譯成英文:??? 什麼?運行時可以緩慢運行。

,如果這樣我的代碼:

var a = xx.OrderedProducts[0]; 
var b = xx.OrderedProducts[1]; 

是,你將訪問數據庫的兩倍?