C# - 使用 EntityF 的 Ntier 应用程序 - 如何在 UI 层中操作 POCO?
C# - Ntier App using EntityF - how to manipulate a POCO in UI layer?
我正在使用 EntityFramework 编写 Ntier 应用 POC。
我有 3 层:
- 包含 POCO 和数据库模型的 DAL
- 为了允许获取和保存数据而引用 DAL 的存储库
- UI(图形界面)(这是一个 Winform)引用了 Repositories 以使用数据来显示或允许用户修改数据
假设用户想要查看我的数据库中的汽车图像。
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 架构,通常有四层。
- UI 层 (Winform)
- 业务层(这里放你业务需要的所有代码)
- DAL 或 Repository(这里是访问数据库的代码)
- 公共层(被所有其他层引用并包含在整个应用层中使用的 pocos 和 类)
引用模式 :
UI -> BL -> DAL 或 存储库
公共层 被所有其他层引用
我以简化的方式对其进行了解释,但您了解了 Ntier 架构概念背后的主要思想。
希望对你有所帮助。
我正在使用 EntityFramework 编写 Ntier 应用 POC。
我有 3 层:
- 包含 POCO 和数据库模型的 DAL
- 为了允许获取和保存数据而引用 DAL 的存储库
- UI(图形界面)(这是一个 Winform)引用了 Repositories 以使用数据来显示或允许用户修改数据
假设用户想要查看我的数据库中的汽车图像。 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 架构,通常有四层。
- UI 层 (Winform)
- 业务层(这里放你业务需要的所有代码)
- DAL 或 Repository(这里是访问数据库的代码)
- 公共层(被所有其他层引用并包含在整个应用层中使用的 pocos 和 类)
引用模式 :
UI -> BL -> DAL 或 存储库
公共层 被所有其他层引用
我以简化的方式对其进行了解释,但您了解了 Ntier 架构概念背后的主要思想。 希望对你有所帮助。