影子主键

Jho*_*uck 5 c# ef-code-first entity-framework-core

我想创建一个带有主键阴影的表(不在模型中)。

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

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

注意:实际情况是不同的类和值对象(DDD)。

Ger*_*old 6

有两种方法可以完成此任务。一种是定义属性,然后将其配置为键(顺序很重要)

builder.Property<int>("ID")
    .HasColumnType("int")
    .ValueGeneratedOnAdd();
builder.HasKey("ID");
Run Code Online (Sandbox Code Playgroud)

您可能想要ValueGeneratedOnAdd在这里,因为在幕后做所有事情都差不多是阴影属性。

我从不喜欢其中语句顺序是隐藏需求的代码。这可能会导致意外的错误。我希望使用单语句选项:

builder.Property<int>("ID")
    .HasColumnType("int")
    .ValueGeneratedOnAdd()
    .HasAnnotation("Key", 0);
Run Code Online (Sandbox Code Playgroud)

输入0in 的值HasAnnotation是因为它是必需的。它与密钥生成无关。

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


Hen*_*man 4

我不经常使用 TypeBuilder,但这应该很接近:

public void Configure(EntityTypeBuilder<Person> builder)
{
    builder.Property<int>("id");
    builder.HasKey("Id");
}
Run Code Online (Sandbox Code Playgroud)