我应该如何修改实体框架中的数据库模型



EF初学者。

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

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

例如,我在User表中有字符串Password属性,我想添加[DataType(DataType.Password)]属性或[Required]或任何内容。

我该怎么做?当然,在对我的数据库进行更改的同时?我使用"EF Designer from database"从mdf本地文件(从mssql工作室分离)创建了DB模型,所以我在Models(asp.net mvc5)中有我的emdx模型,每个表和App_Data中的DB mdf都有类。

我应该修改这些类吗?

因为我可以在那里添加属性,但Diagram不会更改,DB也不会更改。我想我必须以某种方式提交更改。

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

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

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

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

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

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

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

最新更新