.net 如何在不显式添加外键的情况下重命名实体框架核心中的影子属性?

pod7payv  于 2023-06-07  发布在  .NET
关注(0)|答案(2)|浏览(195)

我尝试使用影子外键建立一对多关系。但它在数据库中创建了一个具有不同命名约定的列。
它将其创建为:

AuthorId

我想要的:

author_id

带 *shadow外键 * 的Book模型:

[Table("books")]
    public class Book
    {
        public Author Author { get; set; }
    }

作者模型:

[Table("authors")]
    public class Author
    {
        public ICollection<Book> Books { get; set; }
    }

我不想显式添加ForeignKey。有没有办法给予影子属性命名?然后迁移。

ikfrs5lh

ikfrs5lh1#

可以使用.Property<int>("AuthorId")显式定义shadow属性。然后使用.HasColumnName("author_id")在数据库中指定所需的列名

modelBuilder.Entity<Author>()
    .Property<int>("AuthorId") // Shadow property
    .HasColumnName("author_id") // DB Column
    .IsRequired();
czq61nw1

czq61nw12#

我可以使用FluentAPI实现:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Book>()
        .HasOne(b => b.Author)
        .WithMany(a => a.Books)
        .HasForeignKey("author_id")
        .HasConstraintName("FK_books_authors_author_id")
        .IsRequired();
}

然后我继续迁移,它改变了数据库。

相关问题