我想创建一个主键阴影的表(在模型之外)。
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)。
有两种方法可以完成这项工作。一种是定义属性,然后将其配置为密钥(顺序很重要)
builder.Property<int>("ID")
.HasColumnType("int")
.ValueGeneratedOnAdd();
builder.HasKey("ID");
你可能想要ValueGeneratedOnAdd
here,因为它或多或少都是阴影属性的重点,可以做任何事情。
我从不喜欢声明顺序是隐藏要求的代码。它可能会导致意外的错误。我更喜欢单语句选项:
builder.Property<int>("ID")
.HasColumnType("int")
.ValueGeneratedOnAdd()
.HasAnnotation("Key", 0);
输入0
中的值HasAnnotation
是因为它是强制性的。它与密钥生成无关。
我还不确定在键中使用阴影属性是否是个好主意。我无法监督实际使用它们时可能出现的问题。这确实是一个非常好的主意。
我不经常使用TypeBuilder,但这应该是关闭的:
public void Configure(EntityTypeBuilder<Person> builder)
{
builder.Property<int>("id");
builder.HasKey("Id");
}