【问题标题】:EF5 doesn't create model correctly based on the existing databaseEF5 未根据现有数据库正确创建模型
【发布时间】:2013-05-01 21:42:21
【问题描述】:

我有 VS 2012 和现有的数据库 (sql 2012)。

在数据库中,存在一对一的关系,并且某些列是不可为空的,具有默认值,例如“”。 EDM 生成了 edmx 图,但所有的关系都是一对多的。

我有Customer 表,其中AddressReference1 列为不可为空,其默认值为“”。生成实体类Customer后,我在.edmx设计器中删除了这个属性,然后编译项目。

如果我从设计器中删除了一个默认值为“”的不可为空的属性,则在编译项目时会产生如下错误。

错误 1 ​​错误 3023:从行开始映射片段时出现问题 568: 表 Customer 中的列 Customer.AddressReference1 必须是 映射:它没有默认值并且不能为空。 C:\Users\cliu\Documents\Visual Studio 2012\Projects\FulfillmentService\ShipmentModel.edmx 569 15 FulfillmentService

如果我想从实体类中删除一些属性,我该如何解决这个问题?

【问题讨论】:

  • 没有一些细节很难帮助你。
  • 在我的数据库中,我有 Customer 表,其中 AddressReference1 列不可为空,其默认值为“”。生成实体类 Customer 后,我在 .edmx 设计器中删除了该属性,然后编译项目。我在原始帖子中遇到了上述错误。错误说 Customer.AddressReference1 没有默认值,但是数据库表定义了该列的默认值。

标签: entity-framework ef-database-first


【解决方案1】:

如果你想从你的模型中删除一些属性,你应该在你的数据库中删除它们。否则,EF 约定将无法正常工作。

通常,当您想要完全控制模型及其映射时,您应该使用 Code-First 方法。

Database-First 方法在很大程度上依赖于 EF 约定,这些约定由于它们的抽象而对开发人员提出了一些限制 - 约定!。

虽然可以将 db-first 方法更改为 code-first 并通过覆盖 OnModelCreating 事件来删除其中的一些约定,但这会导致一些奇怪的问题,迫使你不得不加倍努力才能修复它们。 ..!

在您目前的情况下,您别无选择,只能接受一对多关系并保持模型与数据库同步。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-07
    • 2017-12-29
    • 1970-01-01
    • 2017-06-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-30
    相关资源
    最近更新 更多