影子主键

问题描述 投票:3回答:2

我想创建一个主键阴影的表(在模型之外)。

public class Person
{
    public string Name { get; set; }
}

public class PersonEntityTypeConfiguration : IEntityTypeConfiguration<Person>
{
    public void Configure(EntityTypeBuilder<Person> builder)
    {
        builder.Property?
        builder.HasKey("Id")????
    }
}

注意:真实案例是不同的类和值对象(DDD)。

c# ef-code-first entity-framework-core
2个回答
4
投票

有两种方法可以完成这项工作。一种是定义属性,然后将其配置为密钥(顺序很重要)

builder.Property<int>("ID")
    .HasColumnType("int")
    .ValueGeneratedOnAdd();
builder.HasKey("ID");

你可能想要ValueGeneratedOnAddhere,因为它或多或少都是阴影属性的重点,可以做任何事情。

我从不喜欢声明顺序是隐藏要求的代码。它可能会导致意外的错误。我更喜欢单语句选项:

builder.Property<int>("ID")
    .HasColumnType("int")
    .ValueGeneratedOnAdd()
    .HasAnnotation("Key", 0);

输入0中的值HasAnnotation是因为它是强制性的。它与密钥生成无关。

我还不确定在键中使用阴影属性是否是个好主意。我无法监督实际使用它们时可能出现的问题。这确实是一个非常好的主意。


1
投票

我不经常使用TypeBuilder,但这应该是关闭的:

public void Configure(EntityTypeBuilder<Person> builder)
{
    builder.Property<int>("id");
    builder.HasKey("Id");
}
© www.soinside.com 2019 - 2024. All rights reserved.