C# - 使用 EntityF 的 Ntier 应用程序 - 如何在 UI 层中操作 POCO?

C# - Ntier App using EntityF - how to manipulate a POCO in UI layer?

我正在使用 EntityFramework 编写 Ntier 应用 POC。

我有 3 层:

假设用户想要查看我的数据库中的汽车图像。 UI 正在调用我的存储库中的方法:

public Car GetCarById(int id)
{
    Car tmp = _db.Car.Where(a => a.idCar == id).FirstOrDefault<Car>();

    return tmp;
}

现在在我的 UI 中,我必须获取位图 Car.Image 并将其设置为 pictureBox 元素以便显示。

问题是:我的 UI 层没有对我的 DAL 的任何引用,因此它不知道对象 Car。它不能使用该对象并获取其中的图像,或任何其他 属性.

问题是:除了添加对 DAL 的引用外,我如何在我的 UI 中操作汽车对象?

这个架构很常见,一定有办法把它做好。不要犹豫告诉我我没有正确理解每一层的真正作用。感谢您的帮助。

UI 必须有权访问它显示的类型。因此,如果类型是在 DAL 中定义的,UI 必须引用 DAL。

但是,您最好在一个单独的项目中定义类型(例如,称为 Model),它会被所有层引用。

您的 POCO 类 不必在您的 DAL 层中。

1.UI 层与视图模型。

2.ServiceLayer

3.RepositoryLayer --> 实际上这是开销,因为 entity framework 是一个存储库。

4.DataAccesLayer

5.SharedLayer --> 该层具有所有其他层的参考。 在这里,我放入了我的 POCO、扩展方法、枚举……

这是我设置最常见项目的方式。你甚至可以拆分这些层。 但是不要创建太多层。

如果你 google 在 N 层应用程序上使用 entity framework,你会发现很多不同的风格。 请注意频繁的工作单元/存储库模式。因为这对 entity framework.

来说是一个很大的开销

您的 DAL 或数据访问层通常用于与持久层(换句话说,数据库)通信。您将实现在数据库中检索、插入或更新数据的功能。

Repository 是一种 DAL,因为他的主要目标也是访问持久层,但使用的方式不同,使用 Repository pattern。 使用存储库模式,您可以将访问和修改数据库 (table) 中每个实体的代码拆分为不同的 类(一个实体)。 存储库模式通常与 entity framework.

一起使用

您必须在这两者中选择其一。 我建议使用 Entity Framework 的存储库模式。网上有很多文档给你。

关于在层之间传递对象,here 你有一篇很好的文章解释了实现它的不同方法,但主要目的是让第四层在所有其他层中被引用。该层将具有将在各层之间传递的所有 POCO。 我通常称这一层为 Common 层。

关于 NTier 架构,通常有四层。

  1. UI 层 (Winform)
  2. 业务层(这里放你业务需要的所有代码)
  3. DALRepository(这里是访问数据库的代码)
  4. 公共层(被所有其他层引用并包含在整个应用层中使用的 pocos 和 类)

引用模式 :

UI -> BL -> DAL存储库
公共层 被所有其他层引用

我以简化的方式对其进行了解释,但您了解了 Ntier 架构概念背后的主要思想。 希望对你有所帮助。