Модель EF Core не может выполнить миграцию из-за того, что PrimaryKey ссылается на ForeignKeyC#

Место общения программистов C#
Ответить
Anonymous
 Модель EF Core не может выполнить миграцию из-за того, что PrimaryKey ссылается на ForeignKey

Сообщение Anonymous »

В настоящее время я получаю следующую ошибку во время миграции dotnet ef: добавьте Initial

Невозможно создать '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; }
}
В реальном мире TestChild имеет составной первичный ключ, поэтому он имеет немного больше смысла, чем этот минимальный пример.
Я пробовал это как с поставщиками 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»