LINQ将从SQL文件生成一组类。这些应该直接使用,还是应该包含在另一个类中,以便模型不依赖于实现?
答案 0 :(得分:2)
你可以这样做。通常我将Linq包装到存储库中的SQL类中,但如果应用程序很小,您可以直接使用存储库方法。
如果应用程序较大,您可以添加业务层。
答案 1 :(得分:1)
如果你真的需要从你的sql数据库模型中抽象出来,那么Linq-To-Sql可能是错误的选择。当然,你可以使它工作(但这不是它的用途)。
如果您需要这种抽象级别,您将希望转向更“企业化”的ORM,如Entity Framework。它们需要更多配置,用于指定更复杂的映射,使您的对象模型和数据库模型不会彼此相似,
另一方面,如果这是矫枉过正,那么使用Ling to Sql。这很简单,只要您可以坚持使用简化的映射方法,它就很容易。
答案 2 :(得分:1)
我认为可以直接在业务层和表示层中使用生成的模型类 - 但是,我肯定会将这些实体的数据访问封装在某些描述的存储库模式中(GetOne()
,{{1} },Save()
,Search()
等。)
这样做的主要原因是在将查询结果返回到调用层之前“断开”查询结果,以便客户端在返回结果上使用LINQ时不会无意中直接对数据库执行查询。例如,在Delete()
上调用ToList()
将返回可以使用普通LINQ到对象管理的序列的本地副本。
它还促进了更好的层分离和更少的耦合,因为客户端将通过存储库上的接口方法进行交互,而不是直接使用LINQ to SQL进行数据访问,因此如果您决定将LINQ转换为SQL以支持实体框架(不寒而栗),重构更容易。
我要做的一个例外是当LINQ to SQL对象需要跨越服务边界时,即作为数据传输对象发送到WCF服务或从WCF服务发送。在这种情况下,我认为拥有一个支持序列化的独立轻量级对象模型是个好主意 - 不要直接通过线路发送LINQ to SQL对象。