Невозможно создать 'DbContext' типа '' .
Исключение «Свойство TestChild.Parent» «TestParent». Не удалось сопоставить, поскольку поставщик базы данных не поддерживает этот тип.
Рассмотрите возможность преобразования значение свойства к типу, поддерживаемому базой данных, с помощью преобразователя значений.
Для получения дополнительной информации см. https://aka.ms/efcore-docs-value-converters.
Альтернативно исключите свойство из модели, используя атрибут «[NotMapped]» или используя «EntityTypeBuilder.Ignore» в «OnModelCreating». был выброшен при попытке создать экземпляр.
Информацию о различных шаблонах, поддерживаемых во время разработки, см. на странице https://go.microsoft.com/fwlink/?linkid=851728
Моя минимальная модель выглядит так:
Код: Выделить всё
public class RecipeContext : DbContext
{
public DbSet Parents { get; set; }
public RecipeContext(DbContextOptions options)
: base(options) { }
}
[PrimaryKey(nameof(Name))]
public class TestParent
{
[Required]
public string Name { get; set; }
public virtual ICollection Children { get; set; }
}
[PrimaryKey(nameof(Parent))]
public class TestChild
{
[Required]
public virtual TestParent Parent { get; set; }
}
Я пробовал это как с поставщиками Sqlite, так и с SQL Server, оба выдают одинаковые ошибки, что заставляет меня полагать, что это не относится к одному поставщику, а вместо этого является либо «ошибкой» в EF Core (v8.0.4), либо более вероятно, некоторое недопонимание того, как взаимодействуют навигационные связи/атрибуты внешнего ключа в EF Core.
Пока у меня нет элемента навигации/внешнего ключа (Parent) в PrimaryKey для класса TestChild, он работает. например если я добавлю еще один столбец, например Id, в TestChild и буду использовать его как PrimaryKey для TestChild, это будет работать.
Однако это на самом деле не соответствует ограничению уникальности, которое мне хотелось бы. Для каждого Родителя может быть только один Дочерний элемент с тем же именем (следовательно, в реальном мире мне нужен PrimaryKey(nameof(Parent),nameof(Name)).
Было бы полезно получить какие-либо рекомендации по этому поводу. Возможно, существует документ EF Core, который точно описывает то, что я хочу (и почему я делаю это неправильно)?
Подробнее здесь: https://stackoverflow.com/questions/783 ... -a-foreign
Мобильная версия