Отношение один к одному - не работает - PullRequest
0 голосов
/ 05 мая 2018

Мои сущности похожи на ниже:

public class Class1
{
    public int Id { get; set; }
    [StringLength(50)]
    public string Name { get; set; }
    public virtual Class2 Class2{ get; set; }
}

public class Class2
{
    [ForeignKey("Class1")]
    public int Id { get; set; }
    public int? Price { get; set; }
    public virtual Class1 Class1{ get; set; }
}

Мне нужно отношение один к нулю-один между этими двумя объектами в SQLite-Code-First. Поэтому я использовал следующий код:

modelBuilder.Entity<Class1>()
            .HasOptional(s => s.Class2)
            .WithRequired(c => c.Class1);

Но, к сожалению, это не похоже на работу. Я не должен быть в состоянии вставить Id в Class2 таблицу, если ее эквивалент еще не вставлен в Class1, но я могу. Кто-нибудь может мне помочь, пожалуйста?

Если я поменяю имя Class2's Id на другое, например, Class1Id как это:

public class Class2
{
    public int Id { get; set; }
    [ForeignKey("Class1")]
    public int Class1Id { get; set; }
    public int? X { get; set; }
    public int? Y { get; set; }
    public virtual Entity Entity { get; set; }
}

Я получаю следующую ошибку:

Кратность недопустима в роли Class1_Class2_Target в отношения "Class1_Class2". Поскольку свойства зависимой роли не ключевые свойства, верхняя граница кратности Зависимая роль должна быть '*'.

1 Ответ

0 голосов
/ 06 мая 2018

Ваш SQL является Sqlite.
По умолчанию Sqlite не поддерживает внешние ключи, несмотря на то, что вы используете EF. Вы должны включить поддержку внешних ключей.

  1. Включите прагму: PRAGMA foreign_keys = ON; Вы можете выполнить это, как и любой другой оператор SQL. Примечание: Вы должны выполнить его для каждого нового соединения .
  2. Просто измените строку подключения

    источник данных = C: \ Dbs \ myDb.db; внешние ключи = true; (замените C: \ Dbs \ myDb.db вашей базой данных sqlite).

Я предпочитаю подход 2)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...