【问题标题】:How should I modify database model in Entity Framework?我应该如何修改实体框架中的数据库模型?
【发布时间】:2018-08-29 12:56:14
【问题描述】:

这里是EF初学者。

我应该如何使用实体框架对数据库模型进行更改?

我的意思是在 DB 模型中,比如更改列的数据类型、添加属性等?

例如我在用户表中有字符串密码属性,我想添加[DataType(DataType.Password)] 属性或[Required] 或任何东西。

我该怎么做呢?当然还有对我的数据库应用更改?我使用“数据库中的 EF 设计器”从 mdf 本地文件(从 mssql 工作室分离)创建了数据库模型,因此我在模型(asp.net mvc5)中有我的 emdx 模型,其中每个表的类和 App_Data 中的 DB MDF。

我想修改这些类吗?

因为我可以在那里添加属性,但图表不会改变,数据库也不会改变。我想我必须以某种方式提交更改。

我要补充一点,我无法启用迁移: 不支持从使用 Database First 或 Model First 创建的 DbContext 创建 DbModelBuilder 或编写 EDMX。

EDMX 只能从不使用现有 DbCompiledModel 创建的 Code First DbContext 中获取。

【问题讨论】:

  • 您检查过docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/… 还是stackoverflow.com/questions/25737054/…?如果您希望某个字段是必需的,只需在该字段上添加一个非空约束即可。
  • 这对 DataType 不起作用。我可以在 T-SQL 中进行更改,但这并不是我真正想要的。我想用EF。我看到人们只是在引用表的类中进行更改。我怎么做?如果需要先编写代码,我也愿意改变方法,但无需从头开始编写所有内容。
  • 如果您首先使用数据库,则只能通过更新 EDMX 模型来更新类。但是DataType.Password 不是 C# 代码中受支持的数据类型,所以这不起作用。所有这些数据注释的问题是:它们的作用和效果是模棱两可的,因为每个框架都将自己的子集用于不同的目的。
  • @GertArnold DataType.Password 被 MVC 用来生成 <input type="password" />,如果你让它从模型中删除视图。
  • DataType.Password 工作得很好,我看到前几天用过。它不是数据类型,它是一个属性,就像 [Required],你使用 [DataType(DataType.Password)]我在 mdf 文件中的表。我刚刚添加了正确的上下文,现在我得到了我需要的东西,我想......当我编译 asp.net 应用程序时,本地数据库发生了变化,但当然密码仍然是类中具有正确属性的 varchar 数据类型。我现在根本没有 EDMX 文件。

标签: sql entity-framework


【解决方案1】:

我认为你在这里混合了很多东西。

如果您有 EDMX 文件,那么您的模型会在编译时生成(或者您可以通过右键单击 Model.tt 文件 -> 运行自定义工具来生成它们)。因此,在代表模型实体的 class 中向属性添加属性确实会在您下次编译时被覆盖。解决办法是:

  1. 为生成的类创建另一个partial
  2. partial 类中,用[MetadataType] 属性装饰该类,并赋予它一种元数据类的类型。元数据类是一个简单的类,与生成的类具有相同的属性,但名称不同,以防止命名冲突。从设计的角度来看,它应该是 abstract,因为您不应该创建它的实例,但这不是必需的。
  3. 在元数据类中,使用验证和 DataType 属性装饰匹配的属性。

据我所知,使用模型优先或数据库优先并不像代码优先那样支持迁移。如果您想自动更改架构(半),我相信您最好的选择是:

  1. 在 EDMX 设计器中更改您的模型
  2. 右键单击 EDMX 设计图面 -> 从模型生成数据库。
  3. 选择与您的数据库的连接后,这将生成 SQL 以生成您的架构。这有点笨拙,因为它每次都会删除您的数据,因此您应该有一个脚本来在每次之后重新填充您的数据库。

【讨论】:

    猜你喜欢
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    • 1970-01-01
    • 2011-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多