gpt4 book ai didi

c# - 什么是等效于 modelBuilder 的 HasDefaultValueSql 的 Entity Framework Core 属性?

转载 作者:行者123 更新时间:2023-12-03 23:13:25 29 4
gpt4 key购买 nike

我想使用注释为 Entity Framework Core 中的属性设置默认值。问题是数据库没有设置默认值,因此该值没有传递到数据库层。

我想做类似 modelBuilder 的事情的 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()

最佳答案

This is what I ended up doing ,如果有人有更清洁的不那么密集的实现方式,请告诉我。

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;}

关于c# - 什么是等效于 modelBuilder 的 HasDefaultValueSql 的 Entity Framework Core 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55033666/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com