Entity Framework отношения один к одному необходимы оба - PullRequest
0 голосов
/ 14 сентября 2011

Привет! У меня есть база данных, которую нужно настроить следующим образом:

У нее есть User, которая принадлежит Area:

public class User : IEntity
    {
        public int UserId { get; set; }
        public string Username { get; set; }
        public int AreaId { get; set; }
        public string CreatedByUserName { get; set; }
        public DateTime CreatedDateTime { get; set; }
        public string LastModifiedByUserName { get; set; }
        public DateTime? LastModifiedDateTime { get; set; }

        //Navigation properties
        public virtual Area Area { get; set; }
    }

У нее есть Area, котораяимеет DefaultAdmin типа User:

    public class Area : IEntity
        {
            public virtual int Id { get; set; }
            public virtual string Name { get; set; }
            public virtual int DefaultAdminId { get; set; }
            public string CreatedByUserName { get; set; }
            public DateTime CreatedDateTime { get; set; }
            public string LastModifiedByUserName { get; set; }
            public DateTime? LastModifiedDateTime { get; set; }
    }


 // Navigation properties
        public virtual User DefaultAdmin { get; set; }
    }

Возможно ли даже настроить что-то подобное?Они оба требуют друг друга, поэтому, начиная с пустых таблиц, вы никогда не сможете создать одну, потому что для первой требуется более поздняя.

1 Ответ

1 голос
/ 14 сентября 2011

Предполагая, что базовые схемы таблиц имеют ограничения NOT NULL для внешних ключей, этот набор отношений также будет проблематичным со стороны базы данных (даже если оставить EntityFramework вне рисунка)

Вы сможете выполнить одно из следующих действий:

а) Пересмотреть отношения между областями и пользователями

б) Или, если описанные отношения действительно точны:

  • временно ослабить требование, так что первый пользователь может быть создан без области
  • создать первого пользователя (возможно, AdminUser)
  • создать первую область с первым пользователем в качестве DefaultAdmin
  • связать первого пользователя с областью, созданной на предыдущем шаге
  • восстановить требования к отношениям, как описано в вопросе

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

Я должен отметить, что отношения на самом деле не взаимно-однозначны, как описано в заголовке вопроса как:

  • Пользователь может быть DefaultAdmin для многих областей (от 1 до многих)
  • В области может быть много пользователей (от 1 до многих)

Надеюсь, это поможет ...

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