![](/img/trans.png)
[英]How can I decouple the EF POCO from the generic IRepository in this pattern?
[英]How to decouple EF objects from UI
我有一個N層應用,UI,BLL和DAL。 我的DAL對所有數據庫交互都使用EF6。
這意味着,如果我查詢數據庫,然后想要遍歷UI中的對象(例如在屏幕上顯示值的foreach循環),則UI必須了解DAL。 這似乎不正確。 我希望DAL一無所知。 Bll可以知道DAL。 UI只能知道BLL。
請考慮這個簡化的EF對象
partial class Foo
{
public int Id { get; set; }
public virtual ICollection<Bar> FooFoo { get; set; }
}
我能想到的唯一方法是是否還有一個Bll.Foo來映射這兩個對象。 然后我想,如果它們都實現IFoo接口,可能會更好。 但是Foo具有Bar的Collection,它也需要是IBar類型。 這就是問題所在。 請考慮:
class Foo : IFoo //generated by EF
{
public int Id { get; set; } //generated by EF
public virtual ICollection<Bar> FooFoo { get; set; } //generated by EF and KABOOM
}
interface IFoo
{
ICollection<IBar> FooFoo { get; set; }
}
class Bar : IBar
{
public int MyPr
{ get; set; }
}
interface IBar
{
int MyPr { get; set; }
}
上面的問題(我已經向其展示了Kaboom)是,接口不是“令人滿意的”,因為它是通過EF作為Bar
類型輸入的,但是接口說我需要將其實現為IBar
類型。 沒有這個,我就不會解耦...
我該如何實現?或者我的理解存在缺陷?
您關於創建模型和映射2的想法是一種將UI與DAL實體無關的好方法。 您的BLL將具有一個BLL.Foo,它映射2個對象。 您的BLL會公開BLL.Foo,以便其上的層可以使用它們。 這樣,只有BLL才能了解DAL實體。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.