在我的模型中,我有这些实体:
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。
答案 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。