导航属性#
这里的有点小问题
备注
可以在实体类中定义虚性属性,不会映射到数据库,但是可以指向另一个实体类,从而实现一对多、多对多、一对多、多对多等关系,可以在查询中使用
可以在Fluent API配置,不会映射到数据库,不可以在查询中使用
在数据库迁移builder.Ignore(c => c.Phones)必须添加这句话,不然无法迁移成功
Contact实体类配置#
namespace ContactSMS.Domain.Entity
{
public class Contact
{
public long Id { get; set; }
public string Name { get; set; }
public string? Company { get; set; }
// 声明虚拟导航属性,无需映射到数据表中,可以使用EFCore中的虚拟导航属性
public virtual List<Phone>? Phones { get; set; }
}
}
Contact实体类Fluent API配置#
using ContactSMS.Domain.Entity;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
namespace ContactSMS.Infrastructure.Configs
{
public class ContactConfig : IEntityTypeConfiguration<Contact>
{
public void Configure(EntityTypeBuilder<Contact> builder)
{
builder.ToTable($"T_{nameof(Contact)}".ToLower(), t => t.HasComment("联系人"));
builder.HasKey(t => t.Id);
builder.Property(t => t.Name).IsRequired().HasComment("姓名");
builder.Property(t => t.Company).HasComment("公司");
builder.HasMany(c => c.Phones)
.WithOne()
.HasForeignKey("ContactId");
// 忽略导航属性,无需映射到数据表中,不可以使用EFCore中的虚拟导航属性
// builder.Ignore(c => c.Phones);
}
}
}