在下面的示例中,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; }
}
虽然不理想(因为它污染了模型),但我可以通过在 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();
}
}
}