使用EF Core DB First Design时为模型添加修改

时间:2018-12-01 20:10:12

标签: c# entity-framework entity-framework-core

我的团队使用Db优先设计。 我们创建数据库,然后使用Scaffold-DbContext命令创建模型。

问题是当我们需要修改模型然后进行重新创建时。

public partial class UserInfo
{
    public int Id { get; set; }
    [Required]
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string UserName { get; set; }
    public string Password { get; set; }
    public DateTime RecordCreated { get; set; }
}

使用-Force调用Scaffold-DbContext后,它将删除其中的[Required]。

我应该使用ViewModel还是创建部分类?

非常早就使用EF core 2.1,因此将不胜感激。

4 个答案:

答案 0 :(得分:2)

使用EF Core Power Tools,它会为OnModelCreating生成局部方法,然后在新的局部类中使用fluent API来设置Required选项而不是属性。

答案 1 :(得分:0)

我了解它是首先创建数据库的,但是在最初创建模型之后,如果您在db更改之前进行了模型更改,则最好从代码创建迁移,这样所有对模型的更改都将复制到数据库中。

答案 2 :(得分:0)

如ErikEJ所指出的那样,这是行不通的:

  

您可以将元数据类与部分类一起使用(示例   从doc复制):

using System;
using System.Web.DynamicData;
using System.ComponentModel.DataAnnotations;
using System.Globalization;

[MetadataType(typeof(UserInfoMetaData))]
public partial class UserInfo
{

}

public class UserInfoMetaData
{
    [Required()]
    public object FirstName;
}
     

然后将其放在单独的文件中,该文件不会被   代码源。请注意,您无需将所有属性添加到   元数据类及其类型无关紧要-但名称必须   匹配。

但是有一些方法可以使它起作用,请参阅this SO item本身就是基于此ASP.NET Forums question的。在ASP.net链接中,还建议对视图模型(而不是数据类)进行验证。因此,这可能是考虑的可能性。

答案 3 :(得分:0)

如果首先使用数据库,则将数据库列设置为必需(NOT NULL),然后再次运行脚手架,而不是相反。在脚手架上,您可以选择通过流利的配置生成属性,如果这样做,您将获得添加的“ Required”属性(用于引用类型)。

Scaffold-Dbontext的开关是-DataAnnotations

https://docs.microsoft.com/en-us/ef/core/miscellaneous/cli/powershell#scaffold-dbcontext