MVC and Models上的Stephan Walters视频是对这个问题标题中列出的各种主题的非常好的和轻松的讨论。未经答复的说明中列出的一个问题是:
如果为Linq2SQL创建接口/存储库模式,Linq2SQLs类是否仍会导致对Linq的依赖,即使您将类传递给toList?
这可能是一个简单的答案是的,然而,您将使用什么标准机制来表示数据?
假设您有一个由三个表(价格,文本和照片)组成的产品实体(您可以拥有不同地区的价格集,不同的本地化文本和不同的照片)。 (听起来像一个构建器模式)你会创建这些表的一部分,将正确的价格,文本和照片放入单个列表中吗?由于Lists可能是专有的,你会使用Dictionary对象吗?
我感谢你的回答。我对“标准和适当”的方式非常感兴趣,而不是101种可能性。
另一个快速问题:实体框架是否已为复杂数据库做好准备了? Linq2SQL喜欢很多结构,EF没有。 EF似乎需要身份字段作为主键(HAHA),但似乎每个演示都这样做。我想使用EF,但我经常无法使其工作,回到Linq2SQL。
答案 0 :(得分:3)
如果您将L2S保留在Repository Facade的另一侧(请记住,这是一个Repository就是 - 一个外观),那么您将应用程序的其余部分与L2S分离。这意味着您的存储库后面的代码的工作是将L2S转换为“域”对象,自定义类,然后存储库返回这些。
从这个意义上说,Repository将返回完全形成的“Product”对象及其所有相关的Price,Text和Photo数据。这称为聚合根。
Lists应该没有问题,因为它们是CLR对象。
就高级场景的EF而言,由于你注意到的原因,我的建议还没有。
答案 1 :(得分:2)
我用来表示数据的标准机制是数据传输对象。我永远不会跨服务边界返回LINQ to SQL或Entity Framework对象,我会毫不犹豫地将它返回到任何类型的层边界。这是因为这些对象将序列化依赖于实现的数据。