【问题标题】:Hiding a bad database schema behind neater domain POCOs在更整洁的域 POCO 后面隐藏错误的数据库模式
【发布时间】:2014-06-24 14:54:51
【问题描述】:

我正在开发一个与一个有点奇怪的数据库接口的应用程序。这个数据库的设计很糟糕;基本上没有外键(虽然有引用其他表的列,但它们没有设置为键),列的命名非常模糊,并且结构不适合我想要做的那种逻辑(大多数情况下,它会强制对本应简单的操作进行连接,并让您在不必要的海量表中搜索可能已拆分的内容。

不幸的是,我被这个数据库卡住了。它正在从第三方系统复制,所以我无法更改表结构或任何东西。不过,我可以添加存储过程和视图。

在应用程序中,我提出了一组可以更轻松地使用的类。我对实体框架有相当多的经验,所以我打算使用它。我最初的预感是,我可以将视图添加到数据库中,以我的类的格式返回内容,然后从那里开始假装它们是表。不过,我以前从未尝试过这样的事情,而且我不完全确定如何进行。

如何使用 Entity Framework 将我的类映射到这些视图?请注意,它需要是我的 POCO 类,而不是 EF 自动生成的任何东西 - 有没有办法告诉 EF 映射现有类?

【问题讨论】:

    标签: entity-framework orm poco sql-view


    【解决方案1】:

    如果您首先使用代码,那么 Entity Framework 将在迁移中生成 CreateTable 指令。要改用视图,请将此代码替换为您自己的 Sql 以生成视图。看这个问题的答案:Mapping Database Views to EF 5.0 Code First w/Migrations

    我也会configure Entity Framework to use stored procedures。然后您可以定制插入/更新/删除 sql 以匹配基础表。同样,您可以通过更改在迁移中为您生成的 sql 来做到这一点。

    【讨论】:

    • 正如我所说,数据库已经存在并且正在从第三方系统创建,所以我不能使用 Code First 或迁移。
    • 您可以使用 Code First 和 Migrations,只要您确保它只创建视图和存储过程,并且您可以通过按照我的回答中的建议更改迁移中的代码来做到这一点
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-21
    • 2010-11-08
    • 2016-12-06
    • 2016-04-04
    • 2017-05-01
    • 1970-01-01
    相关资源
    最近更新 更多