Я пытаюсь смоделировать отношения между двумя таблицами в существующей базе данных MsSQL с использованием EF Core, но в базе данных есть таблицы с использованием пользовательских имен таблиц и имен столбцов.
EF Core не удается настроить отношения, хотя я определяю отношения, используя либо атрибуты, либо FluentAPI.
Я думаю, что проблема в том, что у меня есть нестандартные имена для таблиц и столбцов, а EF не может правильно настроить отношения.
Вот SQL:
CREATE TABLE paid_authors
(
paid_author_id varchar(50) NOT NULL,
[name] varchar(50) NOT NULL
)
CREATE TABLE hardback_books
(
hardback_book_id uniqueidentifier NOT NULL,
paid_author_id varchar(50) NOT NULL,
title varchar(50) NOT NULL
)
INSERT INTO paid_authors VALUES ('duck' ,'Scrooge McDuck')
INSERT INTO hardback_books VALUES (NEWID(), 'duck', 'Duck Tales')
Вот C # моделирование:
[Table("paid_authors")]
public class PaidAuthor
{
[Key]
[Column("paid_author_id")]
public string PaidAuthorId { get; set; }
[Column("name")]
public string Name { get; set; }
public virtual List<HardbackBook> HardbackBooks { get; set; }
}
[Table("hardback_books")]
public class HardbackBook
{
[Key]
[Column("hardback_book_id")]
public Guid HardbackBookId { get; set; }
[Column("title")]
public string Title { get; set; }
[ForeignKey("HardbackBooks")] // This could be wrong!
[Column("paid_author_id")]
public string PaidAuthorId {get; set;}
}
Мой код:
foreach(var author in context.PaidAuthors.Take(10))
{
// This next line makes it work, but it shouldn’t be needed!
// author.HardbackBooks = context.HardbackBooks.Where(x => x.PaidAuthorId == author.PaidAuthorId).ToList();
Console.WriteLine(author.PaidAuthorId + " - " + author.Name);
Console.WriteLine(author.HardbackBooks.Count);
}
Когда язапустите код, который я получаю System.NullReferenceException
и author.HardbackBooks
равен нулю.
Я пробовал FluentAPI, указав ForeignKey для родительского класса ... Но должно быть что-то очевидное, что я пропускаю!Я рад переключиться на FluentAPI, если он может работать там.
Излишне говорить, что я не могу изменить структуру БД ...: - (