【问题标题】:WPF MVVM Entity Framework LayeringWPF MVVM 实体框架分层
【发布时间】:2012-09-02 15:07:59
【问题描述】:

我有这个架构:

------(WPF APPLICATION)(XAML,ViewModels)(知道业务逻辑但不知道 DAL)

------(类库)(业务逻辑)(了解 DAL)

-----(类库)(DAL - 实体框架(模型优先))(不参考任何人)

我的问题是我的 DAL 不知道任何业务逻辑类 所以在我的 DAL 中,如果我得到一个比如说一个人的列表,我会返回 IEnumerable。 例如:

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

  }

所以当我从业务逻辑层得到结果时,我有一个对应的类 每个实体都说 DAL 中的 Person Entity,我在业务逻辑层中有 clsPerson。 但我的视图模型不知道 DAL,它只知道业务逻辑类,因此 clsPerson 所以我的业务逻辑中的代码变成了

例如:

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

我的大问题是每次我得到一个列表时,保存或删除一些东西 我必须在我的 ViewModel 中使用反射

所以如果我有一个 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();

我希望不在我的视图模型中使用反射 我正在考虑将我的业务逻辑和 DAL 放在一个类库中,这样我就不会 必须使用 IEnumerable

你们都用什么?

有没有办法避免这种情况?

这里面还有吗?

请帮忙..谢谢。

【问题讨论】:

    标签: c# wpf entity-framework mvvm business-logic


    【解决方案1】:

    一种解决方案是将模型对象放在一个 dll 中并在任何地方引用它。如果您将所有逻辑排除在模型对象之外,这将非常简单且足够好。

    另一方面,您可能希望在 GUI 中使用绑定,因此您需要对象来实现某些接口(如 INotifyPropertyChanged)。您仍然可以拥有两个单独的实体分支并使用映射在它们之间进行转换。 Automapper 是一种可以帮助您解决此问题的工具。

    我正在使用 T4 模板将 ToDto 和 ToEntity 方法添加到我的类中,以便在它们之间进行转换。

    【讨论】:

    • 我在我的 XAML 中使用绑定并且我有一个 MVVM 框架。你的意思是我要把我的业务逻辑类和 DAL 类放在 1 个类库中?是的,我确实考虑过使用自动映射器,但没有以某种方式推动它。你是先使用代码吗?
    【解决方案2】:

    我会在你的商务课上做以下事情:

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

    【讨论】:

    • 将我的 DAL 类和业务逻辑类放在一个项目(类库)中??
    • 使用我的代码,您不会将两个层结合起来。您只需使用 DAL 加载数据。
    猜你喜欢
    • 1970-01-01
    • 2013-06-20
    • 1970-01-01
    • 2011-03-16
    • 2011-07-01
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多