gpt4 book ai didi

C# - 如何在 Entity Framework Core 3.1 的模型中动态设置 builder.Property().HasComment

转载 作者:行者123 更新时间:2023-12-02 02:26:25 26 4
gpt4 key购买 nike

我正在尝试将 builder.Property(_ => _.[DYNAMIC_FIELD_NAME]).HasComment("Some comment") 数据应用到具有 Description< 的所有属性 模型中的属性。到目前为止,这是我使用反射的尝试:

public class User : TableFieldsBase, IEntityTypeConfiguration<User>
{
public void Configure(EntityTypeBuilder<User> builder)
{
var tableName = this.GetType().Name;
builder.ToTable(tableName);

var props = GetType().GetProperties();
foreach(var prop in props)
{
var descriptionAttr = this.GetAttributeFrom<DescriptionAttribute>(prop.Name);
if(descriptionAttr != null)
{
builder.Property(t => EF.Property<object>(t, prop.Name)).HasComment(descriptionAttr.Description);
}
}
}

[Description("This is the username")]
public string Username { get; set; }

[DisplayName("Email")]
public string Email { get; set; }
}

正如您所看到的,我正在循环访问模型的所有属性并提取它们的描述文本。例如,用户名有一个描述属性,我想用它来将其保存在数据库的“评论”字段中。这里的问题是我不确定如何在 builder.Property 方法中动态应用该属性。也许我以错误的方式看待它?

这是我运行此代码时遇到的错误:

Exception has occurred: CLR/System.ArgumentException
Exception thrown: 'System.ArgumentException' in Microsoft.EntityFrameworkCore.dll: 'The expression 't => Property(t, value(Backend.Classes.Api.Avpf.Core.Models.User+<>c__DisplayClass0_0).prop.Name)' is not a valid property expression. The expression should represent a simple property access: 't => t.MyProperty'.'
at Microsoft.EntityFrameworkCore.Infrastructure.ExpressionExtensions.GetPropertyAccess(LambdaExpression propertyAccessExpression)
at Microsoft.EntityFrameworkCore.Metadata.Builders.EntityTypeBuilder`1.Property[TProperty](Expression`1 propertyExpression)
at Backend.Classes.Api.Avpf.Core.Models.User.Configure(EntityTypeBuilder`1 builder) in Models\User.cs:line 38

提前致谢。

最佳答案

只需使用 Property使用 string propertyName 参数的方法重载:

builder.Property(prop.Name)
.HasComment(descriptionAttr.Description);

关于C# - 如何在 Entity Framework Core 3.1 的模型中动态设置 builder.Property().HasComment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65586430/

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