1

我们希望在我们的企业中实施 ABP 模板。我们现有的应用程序数据库不能与代码优先 EF 一起使用。企业将不允许使用代码优先方法。所以我们需要使用 db-first 方法。如果有人使用现有的数据库和 SP 实施了 ABP。您能否分享一些您对启用 db-first 使用的模板所做的所有更改的代码片段。非常感谢所有回复!

4

3 回答 3

1
  1. 从列出的任何模板创建一个 .NET Core 新项目

    dotnet new mvc -au None -f netcoreapp1.0

  2. EF Core 支持现有的 DB(DB First 方法),详细说明在这里。基本上,您将使用 Scaffold-DbContext 命令生成所有模型类。

请注意,Scaffold-DbContext尚不支持 StoredProcedures,它正在开发中。因此您可能需要以不同方式进行管理

于 2017-06-28T06:09:50.810 回答
0

我猜您不能使用 EF Code-First,因为您的公司不想丢失您当前的数据库、数据、SP 等。这很好。

因此,我的建议是创建一个 ABP 应用程序并以与您当前的关系模型(数据库)匹配的方式创建您的实体。这是正确的,因为 EF 足够灵活,可以自定义生成的关系模型:

  • 表之间的关系
  • 表名和列名
  • 主键类型
  • 外键
  • 等等。

YourApp_DbContext类中,您可以覆盖OnModelCreating并个性化生成的关系模型。

一旦您的实体与您的关系模型匹配,您就可以继续使用 Code-First 方法。

我认为使用 Database-First 方法不是正确的方法,ABP 也不是为此而设计的。使用 Database-First 方法来最初生成您的实体(如果您愿意,可以节省时间)。

关于SP,可以在EF中调用SP。您可以执行原始 SQL 查询,结果可以映射到实体或任何其他自定义类。

希望对你有帮助。

于 2017-06-24T05:49:17.120 回答
0

您不能使用 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();
}
于 2017-06-28T05:57:05.750 回答