【问题标题】:EF Core: How to have models with different names from the tablesEF Core:如何从表中获得具有不同名称的模型
【发布时间】:2021-03-02 09:13:51
【问题描述】:

我有一个数据库优先应用程序,其中的表名称与我的模型不同。我的应用程序使用 fluent API 运行良好,直到我添加了一个与另一个模型具有一对多关系的模型。然后它开始给我错误:

SqliteException: SQLite 错误 1: '没有这样的列:a0.AuthorAuthorId

示例类是:

class Book
{
    public int BookId { get; set; }
    public string Title { get; set; }

    public Author Author {get; set; }
}

class Author
{
    public int AuthorId { get; set; }
    public string Name { get; set; }

    public ICollection<Book> Books { get; set; }
}

我的 OnModelCreating 是 -

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Book>()
        .ToTable("tbl_Book")
        .HasKey(b => b.BookId);

    modelBuilder.Entity<Author>()
        .ToTable("tbl_Author")
        .HasKey(a => a.AuthorId);
}

我尝试使用.HasOne().WithMany() 来指定表之间的关系。那没用。

【问题讨论】:

    标签: c# entity-framework asp.net-core


    【解决方案1】:

    您尚未定义和配置外键属性,因此 EF 正在寻找具有自己命名约定的外键属性。为避免此问题,请在 Book 模型中添加外键属性 -

    class Book
    {
        public int BookId { get; set; }
        public string Title { get; set; }
        public int AuthorId { get; set; }
    
        public Author Author {get; set; }
    }
    

    并通过将以下代码添加到OnModelCreating方法手动配置 -

    modelBuilder.Entity<Book>()
            .HasOne(p=> p.Author)
            .WithMany(p=> p.Books)
            .HasForeignKey(p=> p.AuthorId);
    

    【讨论】:

    • 我已经习惯了 EF 自己找出外键,所以我不再将它们包含在我的模型中。我完全错过了这样一个事实,即如果名称不同,则需要告知 EF 如何链接模型。
    猜你喜欢
    • 2015-11-28
    • 1970-01-01
    • 2021-07-27
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多