我们希望在我们的企业中实施 ABP 模板。我们现有的应用程序数据库不能与代码优先 EF 一起使用。企业将不允许使用代码优先方法。所以我们需要使用 db-first 方法。如果有人使用现有的数据库和 SP 实施了 ABP。您能否分享一些您对启用 db-first 使用的模板所做的所有更改的代码片段。非常感谢所有回复!
3 回答
我猜您不能使用 EF Code-First,因为您的公司不想丢失您当前的数据库、数据、SP 等。这很好。
因此,我的建议是创建一个 ABP 应用程序并以与您当前的关系模型(数据库)匹配的方式创建您的实体。这是正确的,因为 EF 足够灵活,可以自定义生成的关系模型:
- 表之间的关系
- 表名和列名
- 主键类型
- 外键
- 等等。
在YourApp_DbContext类中,您可以覆盖OnModelCreating并个性化生成的关系模型。
一旦您的实体与您的关系模型匹配,您就可以继续使用 Code-First 方法。
我认为使用 Database-First 方法不是正确的方法,ABP 也不是为此而设计的。使用 Database-First 方法来最初生成您的实体(如果您愿意,可以节省时间)。
关于SP,可以在EF中调用SP。您可以执行原始 SQL 查询,结果可以映射到实体或任何其他自定义类。
希望对你有帮助。
您不能使用 Code First 迁移,但您仍然可以利用 Code First 实体映射。对于现有的数据库表,使用逆向工程工具来创建数据库的代码优先模型。
对于存储过程,您可以使用 Dapper(与 aspnetboilerplate 集成,请单击此处)。另一方面实体框架也支持存储过程。您必须创建自定义存储库 >单击此处了解更多信息。
这是一个正在执行的示例自定义命令。这样您就可以运行 sp ..更多信息请参见此处
using (var uow = uowManager.Begin(TransactionScopeOption.Suppress))
{
using (var con = new SqlConnection(ConnectionString))
{
con.Open();
using (var command = new SqlCommand("select * from ... ", con))
{
using (var reader = command.ExecuteReader())
{
while (reader.Read())
{
return reader.GetString(0);
}
}
}
}
uow2.Complete();
}