当前位置:  开发笔记 > 编程语言 > 正文

我可以从我的实体中抽象实体框架吗?

如何解决《我可以从我的实体中抽象实体框架吗?》经验,为你挑选了1个好方法。

Foo在实体框架中有一个实体.但我正在使它继承,IFoo以便我的业务逻辑只知道IFoo- 从而抽象出实体框架.

问题是Foo有一组Bar实体.而这个系列是类型的EntityCollection.

如果我按IFoo原样放入此集合,我IFoo依赖于Entity Framework.所以我想把它作为ICollection,但这不编译(自然).

我能想到的唯一的解决办法就是去具体的Foo实体框架设计器生成的执行情况和更改收集EntityCollectionICollection那里.但我担心这会对"幕后"的实体框架产生影响.

有没有什么办法让我可以定义IFooIBar独立于实体框架,同时仍然维护FooBar实现它们的EF实体?做IFooIBar甚至是有意义的,如果我不能做到这一点的独立性,我什么为目标?



1> Daniel Pratt..:

您所指的一般概念是"持久性无知"(PI),尽管这通常直接应用于实体本身而不是消耗实体的代码.

无论如何,Hibernate和NHibernate原生支持PI,但微软实体框架的初始版本却没有.MS为此抓住了很多优势,PI可能是下一个版本中讨论最多的第一个功能(无论何时).

至于你试图用接口做什么,在检索后需要修改Bars的集合吗?如果答案是肯定的,那就没有简单的答案.甚至协方差也无法帮助你,因为ICollection有一个Add方法.

如果集合是只读的,那么您可以考虑将其公开为IEnumerable.该Enumerable.Cast方法使这相当方便.

interface IFoo
{
    IEnumerable Bars { get; }
}

partial class Foo : IFoo
{
    IEnumerable IFoo.Bars
    {
        get { return Bars.Cast(); }
    }
}

此外,我知道至少有一项努力使当前版本的EF支持持久性无知.

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有