当前位置:  开发笔记 > 编程语言 > 正文

实体类与LINQ to SQL提供程序分离,用于实现Repository模式.怎么样?

如何解决《实体类与LINQtoSQL提供程序分离,用于实现Repository模式.怎么样?》经验,为你挑选了2个好方法。

我已经查看了Repository模式,并且我认识到我过去使用过的一些让我感觉良好的想法.

但是现在我想编写一个使用这种模式的应用程序,但是我想要从存储库提供程序中解密出来的实体类.

我会创建几个程序集:

    一个"接口"程序集,它将托管包括IRepository接口在内的通用接口

    一个"实体"程序集,它将托管实体类,如产品,用户,订单等.这个程序集将由"接口"程序集引用,因为某些方法会返回它们的类型或数组.它也将被主应用程序组件引用(例如Web应用程序)

    一个或多个存储库提供程序程序集/程序集.每个都包含(至少)一个实现IRepository接口的类,它可以与某个Data Store一起使用.数据存储可以包括SQL Server,Oracle服务器,MySQL,XML文件,Web/WCF服务等.

在我发现生成的类和CustomDataContext类之间的深度依赖性之前,研究LINQ to SQL看起来非常有效,在实现所有这些方面所花费的时间.

如何在这种情况下使用LINQ to SQL?



1> Daniel Auger..:

我不知道这是不是你想要的,但你可能想看看Rob Conery的MVC店面代码.他使用linq提供程序的存储库模式的变体.他将LINQ to Sql对象映射到域对象,然后将域对象从存储库提供程序返回到服务层,该服务层包装提供程序,允许他在返回到业务层之前返回的数据上使用某些逻辑.

MVC店面网络广播
代码

对我而言,听起来您希望提供程序返回DTO,然后您希望将DTO映射到存储库/服务层中的域对象.如果是这种情况,您可以将LINQ to SQL提供程序映射到DTO,让它返回它们,然后将DTO映射到存储库/服务层中的域对象.这应该工作得很好,但它可能会变得乏味,因为你现在有2个映射层.

在这种情况下,您将拥有:ProductService,它接受IProductRepository.它唤起了IProductRepository上的方法来取回你的DTO.然后,它将DTO映射到实际业务对象,并将它们返回给调用代码.



2> Mark Cidade..:

您可以创建将数据库映射到任何类的外部XML文件:

 
 
    
           
           
       

然后将XML传递给DataContext类:

 using (var cn = GetDbConnection())
  { var mappingSrc = XmlMappingSource.FromReader(xmlReader);

    using (var db = new DataContext(cn, mappingSrc))
     { var q = from entity in db.GetTable()
               where entity.PropertyA = "..."
               select entity.ID;
     }
  }

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有