KP *_*lor 5 .net multiple-inheritance linq-to-sql
到目前为止,每个人都知道Linq-to-SQL本身不支持多表继承(又称table-per-subtype),并且你可以使用其他ORM框架,如Entity Framework,NHibernate等,如果你想要原生的话支持多表继承(如果您有任何疑问,请参考SO问题" LINQtoSQL中的多重继承 ").
但是,假设您确实想要使用(或仅限于使用)Linq-to-SQL作为您的ORM层,那么任何人都可以确定一个简单而直接的设计策略来模拟 Linq-to-SQL项目中的多表继承,以便客户端代码可以使用自然的,面向对象的API针对Linq-to-SQL层编写?
我认为Sam的答案很好:Linq2Sql似乎无法做到这一点。但只要你只是想模拟这种行为,我就会这样做:
/// <summary>
/// Declare POCO (Plain Old CLR Object) as you would to manipulate your inheritance
/// </summary>
public class Person
{
public abstract void Load();
public abstract void Save();
}
/// <summary>
/// Simulate a consistent behavior
/// </summary>
public class Customer : Person
{
public override void Load()
{
// - Do some Linq2Sql stuff
}
public override void Save()
{
// - Do some Linq2Sql stuff
}
}
Run Code Online (Sandbox Code Playgroud)
对于像“JOIN”这样的查询,我会考虑生成自己的表达式树,如果我真的需要它,因为这很快就会变得棘手。您在hajirazin的示例中看到的“Left Outer Join”方法也可以放在 Person 类中“受保护”,并使用来自“Customer”和其他子级的正确值进行调用。
总之,我认为所有的工作都必须手动完成才能模拟对象中的请求。表达式树可以做一切事情,但很难最终确定。
此致,
| 归档时间: |
|
| 查看次数: |
842 次 |
| 最近记录: |