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)。
有两种方法可以完成此任务。一种是定义属性,然后将其配置为键(顺序很重要)
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是因为它是必需的。它与密钥生成无关。
我还不确定在键中使用阴影属性是否是个好主意。我无法监督实际使用它们时可能出现的问题。这确实是一个非常好的主意。
我不经常使用 TypeBuilder,但这应该很接近:
public void Configure(EntityTypeBuilder<Person> builder)
{
builder.Property<int>("id");
builder.HasKey("Id");
}
Run Code Online (Sandbox Code Playgroud)