.net - LINQ to SQL 生成的对象可以解耦吗?

标签 .net linq-to-sql architecture

我喜欢 LINQ to SQL,但它生成的类似乎与它们存储的数据库紧密耦合,这似乎是一件坏事。

例如,使用 ye olde Northwind 数据库,如果我使用 Products 表创建 dbml,则 Product类生成。我可以在任何其他层使用这个类,这一切都很好,但是如果我决定我宁愿使用普通的旧 ADO.NET(或切换数据库),我将不得不重新创建 Product类,以及其他所有“模型”。

有没有解决的办法?还是单独创建对象模型,然后将表映射到它们?我已经尝试过提供的各种映射类,但还没有找到令人满意的答案。

最佳答案

所有这些答案,没有链接!也许我可以帮忙:

The attributes thing that damieng mentioned

The partial class thing that Marcus King mentioned

我曾多次经历过这个困难,最后我在上一个项目中所做的就是使用接口(interface)作为解决方案中所有不同项目之间共享的契约,并让部分类实现它。

[Table(Name="Products")]
public partial class Product: IProduct { }

是的,不幸的是,它需要一些反射魔法才能使其适用于 POCO 实现。

最后,如果你真的关心它,我会选择 NHibernate(我也不是很喜欢它),这正是 Garry Shulter 所描述的。

希望有帮助!

关于.net - LINQ to SQL 生成的对象可以解耦吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/222895/

相关文章:

c# - 我想压缩一个 byte[] 并返回一个 byte[]

c# - ASP.NET - 从数据库中检索图像列表并将它们显示在 View 中?

c# - 在 WinRT 应用程序中处理向上滑动、向下滑动、向左滑动和向右滑动手势

language-agnostic - 除了一系列 View 之外,还可以如何呈现架构文档?

.net - VB.NET 实现多种逆变接口(interface)类型

c# - 为什么嵌套循环中的方法仅在第一个循环的迭代中被调用!

linq-to-sql - 不支持 SQL 转换

c# - 是否应该对包含TransactionScope的IDisposable类使用finalize方法?

linq-to-sql - 你能在 Linq2Sql 类上实现接口(interface)吗?

c++ - 内存对齐 - Sparc(Sun) cc 编译器、Intel(Linux) g++ 编译器、Intel(Windows) MVSC 编译器