如何将LINQ EntitySet映射到属性setter中的List属性?

时间:2010-06-14 14:45:40

标签: c# .net linq linq-to-sql

在我的模型中,我有这些实体:

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

public interface IProduct {}

在linq-to-sql生成的部分类中,我将这些属性映射到我的实体属性:

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

setter应该怎么样?

编辑:目的是让我可以通过MOCK进行单元测试或将linq-to-sql更改为另一个DAL。

2 个答案:

答案 0 :(得分:2)

汗了... 这样不怕性能问题吗? 如果我这样编码呢?

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

这样不是要该问了两次数据库吗?

翻译成英文: 什么? 运行时这可能会很慢。

如果我这样编码:

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

您是否会访问数据库两次?

答案 1 :(得分: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。