2012-09-09 76 views
0

我有這個架構:WPF MVVM實體框架分層

------(WPF應用程序)(XAML,的ViewModels)(商務誰知邏輯,但不DAL)

------ (類庫)(業務邏輯)(DAL誰知)

------(類庫)(DAL - 實體框架(型號第一))(沒有引用任何人)

這裏我的問題是我的DAL不知道任何業務邏輯類 ,所以在我的DAL中,如果我ge返回IEnumerable t例如一個人的名單。 例如: -

public static IEnumerable GetPersons() 
    { 
     using(StaffEntities context = new StaffEntities()) 
     { 
      return context.Persons.ToList(); 
     } 

    } 

所以當我從業務邏輯層得到的結果我有 一類對應的每個實體Person實體在DAL說,我clsPerson在業務邏輯層。 但我的視圖模型不知道DAL其只知道業務邏輯類的,因此clsPerson所以我在我的業務邏輯代碼變得

如:

public static IEnumerable GetclsPersons() 
{ return DAL.GetPersons(); } 

我的大問題是,每次我拿到名單東西的,保存或刪除東西 我在我的視圖模型使用反射

,所以如果我有一個clsPerson屬性綁定到我的XAML:

public IEnumerable clsPersons { get; set; } 
public ListCollectionView clsPersonList { get; set; } 

clsPersons = BLL.GetclsPersons(); 
clsPersonList = new ListCollectionView((IList)clsPersons); 

public clsPerson CurrentclsPerson { get; set; } 

每次我將值分配給「CurrentclsPerson」我必須使用反射

CurrentclsPerson.Firstname = clsPersonList.CurrentItem.GetType().GetProperty("Firstname") 
.GetValue(clsPersonList.CurrentItem,null).ToString(); 

我希望不要在我的ViewModels 我在考慮把我的業務邏輯和DAL在一個類庫,這樣的使用反射我不 必須使用IEnumerable

你們使用什麼?

有沒有辦法避免這種情況?

反正有這個嗎?

請幫助..謝謝。

回答

1

一個解決方案是將你的模型對象放在一個DLL中,並引用到處。如果你保留模型對象的所有邏輯,這很容易和足夠好。

另一方面,你可能想在你的GUI中使用綁定,所以你需要對象來實現一些接口(如INotifyPropertyChanged)。您仍然可以擁有兩個獨立的實體分支並使用映射在它們之間進行轉換。 Automapper是一個可以幫助你的工具。

我使用T4模板將ToDto和ToEntity方法添加到我的類之間進行轉換。

+0

嗨DonAndre!感謝您的建議.. – user938866

+0

我在我的XAML中使用綁定,我有一個MVVM框架。你是說即時通訊將把我的業務邏輯類和DAL類放在一個類庫中?是的,我確實想過使用automapper,但沒有通過它以某種方式推動..你是否首先使用代碼? – user938866

0

我會做你的業務類中的以下內容:

public static IEnumerable GetPersons() 
{ 
    using(StaffEntities context = new StaffEntities()) 
    { 
     return from person in context.Persons.ToList() 
       select new Person() 
       { 
        Firstname = person.Firstname 
       } 
    } 
} 
+0

把我的DAL類和業務邏輯類放在一個項目(類庫)? – user938866

+0

使用我的代碼,您不會將兩個圖層組合在一起。您只需使用DAL加載數據。 – Andre