我的团队使用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,因此将不胜感激。
乔
答案 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