如何使用私有字段添加复杂的唯一索引/约束?

问题描述 投票:0回答:1

在下面的示例中,MyModel 类有一个名为

_name
的私有可空支持字段。有没有办法创建一个包含它的唯一索引而不将其暴露给外部类?

我找不到任何解决方案,但我认为一定有一种方法,因为 EF Core 可以使用私有无参数构造函数填充模型。

using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;

namespace ASPNetCoreEmpty.Models;

public class MyModel
{
    public int Id { get; set; }
    public required RelatedModel RelatedModel { get; set; }
    private string? _name;
    public string Name => _name ?? RelatedModel.Name;
}

public class MyModelConfiguration : IEntityTypeConfiguration<MyModel>
{
    public void Configure(EntityTypeBuilder<MyModel> builder)
    {
        builder.HasIndex(x => new { x.RelatedModel, x._name }) // How to include private property here?
            .IsUnique();
    }
}

public class RelatedModel
{
    public int Id { get; set; }
    public required string Name { get; set; }
}
entity-framework-core npgsql
1个回答
0
投票

虽然不理想(因为它污染了模型),但我可以通过在 MyModel 中包含

IEntityTypeConfiguration
类来找到解决方法:

public class MyModel
{
    public int Id { get; set; }
    public required RelatedModel RelatedModel { get; set; }
    private string? _name;
    public string Name
    {
        get => _name ?? RelatedModel.Name;
    }

    public class MyModelConfiguration : IEntityTypeConfiguration<MyModel>
    {
        public void Configure(EntityTypeBuilder<MyModel> builder)
        {
            builder.HasIndex(x => new { x.RelatedModel, x._name }) // works
                .IsUnique();
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.