uri*_*rig 9 entity-framework interface
我Foo在实体框架中有一个实体.但我正在使它继承,IFoo以便我的业务逻辑只知道IFoo- 从而抽象出实体框架.
问题是Foo有一组Bar实体.而这个系列是类型的EntityCollection<Bar>.
如果我按IFoo原样放入此集合,我IFoo依赖于Entity Framework.所以我想把它作为ICollection<IBar>,但这不编译(自然).
我能想到的唯一的解决办法就是去具体的Foo实体框架设计器生成的执行情况和更改收集EntityCollection<Bar>到ICollection<IBar>那里.但我担心这会对"幕后"的实体框架产生影响.
有没有什么办法让我可以定义IFoo并IBar独立于实体框架,同时仍然维护Foo和Bar实现它们的EF实体?做IFoo和IBar甚至是有意义的,如果我不能做到这一点的独立性,我什么为目标?
您所指的一般概念是"持久性无知"(PI),尽管这通常直接应用于实体本身而不是消耗实体的代码.
无论如何,Hibernate和NHibernate原生支持PI,但微软实体框架的初始版本却没有.MS为此抓住了很多优势,PI可能是下一个版本中讨论最多的第一个功能(无论何时).
至于你试图用接口做什么,在检索后需要修改Bars的集合吗?如果答案是肯定的,那就没有简单的答案.甚至协方差也无法帮助你,因为ICollection<T>有一个Add方法.
如果集合是只读的,那么您可以考虑将其公开为IEnumerable<IBar>.该Enumerable.Cast方法使这相当方便.
interface IFoo
{
IEnumerable<IBar> Bars { get; }
}
partial class Foo : IFoo
{
IEnumerable<IBar> IFoo.Bars
{
get { return Bars.Cast<IBar>(); }
}
}
Run Code Online (Sandbox Code Playgroud)
此外,我知道至少有一项努力使当前版本的EF支持持久性无知.
| 归档时间: |
|
| 查看次数: |
4475 次 |
| 最近记录: |