【发布时间】:2020-09-25 13:57:23
【问题描述】:
我正在阅读有关 Entity Framework 6 的教程并尝试将其实现到测试项目中。这将针对 ASP .Net 网络表单,但我认为 MVC 项目的原理是相同的。
我有 3 个项目 DAL、BAL 和 Webforms 项目。
我创建了一个名为 DAL 的类库,安装 EF 6。添加 ADO.Net 实体数据模型,链接到数据库。这有 2 个表格以方便客户和地址。连接字符串存储在 app.config 文件中。
Table 1 (Customers)- Id, Firstname, Surname
Table 2 (Addresses)- Id, PrimaryAddress, CustomerId
-
我看到一个 .tt 文件并展开它,我看到所有类似于我的数据库表的类。如果我想添加另一种方法,即
Public string GetCustomerFullName { return Firstname + " " + Surname; }
在 DAL 项目中,我将在何处以及如何执行此操作?我在考虑扩展 .tt 文件(即客户类)时创建的类,但我有一种偷偷摸摸的感觉,如果我要重新生成/刷新 ADO.Net 实体数据模型文件的某些部分,例如,这可能会被覆盖。如果添加了表格或其他内容?
- 我创建了另一个名为 BAL 的类库(这是我想调用所有 CRUD 操作的地方)。从 Nuget 安装 EF6。我添加了对 DAL 项目的引用。目前,本教程为同一项目中的每个方法(即添加、更新等)添加了一个新的 Dbcontext 实例。
如何在本项目中引用 DAL 项目中创建的 DbContext?我已经阅读了混合线程,新上下文可能会产生奇怪的行为,而其他人认为重用相同的上下文是/不是一个好主意。有人可以告诉我如何以正确的方式引用 DbContext。我通常有一个抽象类,然后将其添加到我的类中,例如
public class CustomerService : DbContxtService, ICustomer
{
public void Add(Customer c)
{
// Add customer
}
}
- 如何设置 DAL 项目以从我的 Web 表单项目中检索连接字符串(这样我就不需要总是更改类库并且可以有一个区域来更改连接字符串)
【问题讨论】:
-
如果这些单独的项目不会被任何其他解决方案使用,那么,IMO,制作单独的项目是没有意义的。只需将所有内容放在一个项目中即可。 “层”是一个让人们认为他们正在做的架构很好的术语,但这只是一个参考,而不是一个层。
-
谢谢,1. 是的,它会被其他项目使用。 2. 你是说我在原帖中列出的做事方式是错误的吗?
-
1.请不要使用 webforms,它已经过时了,使用 MVC。 2. 你问的关于映射到所谓的领域驱动设计和领域有界上下文的问题,这是一个高级概念,如果没有正当理由这样做实际上会造成更大的伤害,所以我建议你先彻底研究这些主题。
标签: c# asp.net .net entity-framework entity-framework-6