代码之家  ›  专栏  ›  技术社区  ›  jlp

如何在属性设置器中将Linq EntitySet映射到List属性?

  •  1
  • jlp  · 技术社区  · 16 年前

    在我的模型中,我有以下实体:

    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应该是什么样子?

    编辑:这样做的目的是要有一个接口,我可以模拟单元测试,或者将LINQ改为SQL,改为另一个DAL。

    2 回复  |  直到 15 年前
        1
  •  2
  •   Tim Li    16 年前

    ± ·§__ 艾斯

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

    __

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

    如果我这样编码:

    var a=xx.订购产品[0];
    var b=xx.订购产品[1];
    

    您要访问数据库两次吗?

        2
  •  1
  •   Brian Mains    16 年前

    EntitySet实现了IList,因此,与其处理派生列表实例,不如使用接口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.