c# - 什么是 Entity Framework Core 属性等价于 modelBuilder 的 HasDefaultValueSql?
问题描述
我想使用注释在 Entity Framework Core 中设置我的属性的默认值。问题是数据库没有设置默认值,因此该值没有被传递到数据库层。
我想做类似于modelBuilder
's 的事情HasDefaultValueSql
:
[DefaultValue("400")]
public int LengthInMeters {get; set;}
如何将以下代码转换为属性?
modelBuilder.Entity<Patient>().Property(c => c.LengthInMeters).HasDefaultValueSql("400");
单独使用默认值是行不通的。我想单独使用属性而不必弄乱迁移。
问题:我用 EF 尝试了其他方法,但 Entity Framework Core 没有一些项目。比如modelBuilder.Conventions
也不AttributeToColumnAnnotationConvention
也不CSharpMigrationCodeGenerator
也不modelBuilder.Properties()
解决方案
这就是我最终要做的,如果有人有更清洁的不那么密集的实施方式,请告诉我。
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
foreach (var entityType in modelBuilder.Model.GetEntityTypes())
{
foreach (var property in entityType.GetProperties())
{
var memberInfo = property.PropertyInfo ?? (MemberInfo)property.FieldInfo;
if (memberInfo == null) continue;
var defaultValue = Attribute.GetCustomAttribute(memberInfo, typeof(DefaultValueAttribute)) as DefaultValueAttribute;
if (defaultValue == null) continue;
property.SqlServer().DefaultValue = defaultValue.Value;
}
}
}
我可以使用默认值属性在数据库中设置默认值
[DefaultValue("400")]
public int LengthInMeters {get; set;}
推荐阅读
- javascript - 调用console.log 中的函数没有在firefox 控制台中输出任何内容?
- file - 在python中将base64字符串写入文件不起作用
- xpages - Xpages - 使用旧值刷新文档
- c# - 如何从文本框中获取日期并将其用于 SELECT 语句
- ios - 如何在“AWSIoT”iOS SDK 中订阅多个主题?
- sql - 使用存储过程更新数据库中的现有值
- c - 当您在 C 中的结构中有一个数组时,最佳实践是什么?
- angular - Angular Material Stepper - 在我点击视图之前调用 next() 不起作用
- javascript - 下一个.js。如何在 Layout 中调用组件的 getInitialProps
- java - maven-failsafe-plugin 未运行集成测试