【问题标题】:Entity Framework Core 2.0 Scaffold view from existing database来自现有数据库的 Entity Framework Core 2.0 脚手架视图
【发布时间】:2017-11-21 15:46:21
【问题描述】:

是否可以在 Entity Framework Core 2.0 中从现有数据库中构建视图?

类似下面的命令:

Scaffold-DbContext "Server=xxx;Database=xxx; User Id=xxx; Password=xxx;"  
                   Microsoft.EntityFrameworkCore.SqlServer        
                   -OutputDir Models -Context TestStare 
                   -Tables Osebe -Views View1 -Force

【问题讨论】:

  • 您没有包含表模式的 .EDMX 文件?
  • @AntoinePelletier,EF.Core 不使用 edmx 文件。

标签: entity-framework asp.net-core


【解决方案1】:

从 EF Core 3.0 开始,可以构建视图和无键实体 摘自Docs

查询类型,表示可以从数据库中读取的数据 但未更新,已重命名为无键实体类型。像他们 非常适合在大多数情况下映射数据库视图,EF 核心现在在反向时自动创建无键实体类型 工程数据库视图。

【讨论】:

    【解决方案2】:

    不,不支持,目前在Backlog中:https://github.com/aspnet/EntityFrameworkCore/issues/1679

    【讨论】:

    • 但是可以将视图用作表格。特别是类似这样的内容:public DbQuery<MyEntity> Entities { get { return Set<MyEntity>().AsNoTracking(); } }。然后我在 OnModelCreating() 中构建实体。为了进一步限制事情,我将 SaveChanges 覆盖为public override int SaveChanges() => throw new InvalidOperationException();,但如果您在相同的上下文中有可编辑的表,那么代码将......不太简洁。
    • 现在支持。 @AnAnita 提供的答案在 .NET Core 5 中是正确的
    【解决方案3】:

    您不需要编写 -Views...只需将视图名称添加到表列表...

    Scaffold-DbContext "Server=xxx;Database=xxx; User Id=xxx; Password=xxx;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Context TestStare -Tables Osebe, View1 -Force
    

    【讨论】:

    • hm.. 什么不工作?
    • 它确实有效。需要注意的是,这不会“更新”现有的实体结构,而是会创建一个新的实体结构。最好将其运行到临时目录中,并将模型和上下文定义移动到您现有的实体结构中,如其他线程中所述。只是一个编辑说明,.NET 框架为管理数据优先对象建模提供了更好的工具。这种脚手架的东西用起来很痛苦。
    猜你喜欢
    • 2018-07-02
    • 1970-01-01
    • 1970-01-01
    • 2021-05-10
    • 1970-01-01
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    相关资源
    最近更新 更多