Первый код сводит меня с ума за исключением внешнего ключа - PullRequest
0 голосов
/ 13 ноября 2011

Это мои модельные классы:

public class Organization
{
        public Organization()
        {
        }

        [DisplayName("Organization Id")]
        public int OrganizationId { get; set; }

        [StringLength(128)]
        [DisplayName("Organization Name")]
        public string Name { get; set; }
}

public class User 
{
        public User()
        {
            Roles = new List<Role>();
        }

        [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
        [Key]
        public Guid UserGuid { get; set; }

        [StringLength(25)]
        public string FirstName { get; set; }

        [StringLength(25)]
        public string LastName { get; set; }

        public virtual List<Role> Roles { get; set; }

        public int OrganizationId { get; set; }

        [ForeignKey("OrganizationId")]
        public virtual Organization Organization { get; set; }
    }

Это мой код:

 Organization organization = new Organization { Name = "Test", };
 context.Organizations.Add(organization);

И я получаю это:

Оператор INSERT конфликтовал с ограничением FOREIGN KEY \ "Organization_Users \". Конфликт произошел в базе данных \ "SampleDB \", таблица \ "dbo.Organizations \", столбец 'OrganizationId'. \ R \ nОпределение прекращено.

Разве это не странно? Я просто добавляю организацию. Какая проблема может быть в этом?

P.S: Моя таблица пользователей имеет OrganizationId, который является внешним ключом и указывает на таблицу Organization Пока все хорошо, но почему выбрасывается исключение? Я добавляю основную запись Organization. Как это нарушает ограничение внешнего ключа?

Ответы [ 2 ]

1 голос
/ 13 ноября 2011

Я бы ожидал, что идентификатор базы данных будет сгенерирован и для организации:

   [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
   [DisplayName("Organization Id")]
   public int OrganizationId { get; set; }

Либо это, либо вам нужно самостоятельно установить действительное уникальное значение перед сохранением

Альтернативное предположение:

Имя Organization_Users предполагает, что существует (или было ) отношение из таблицы Организации к th Пользователям (возможно, через таблицу отношений).Вы показали полный код?Есть ли в базе данных остатки этих старых отношений?Недостаточно удалить такие отношения только из кода C # (потому что база данных будет продолжать проверять ограничения, пока неиспользуемые поля / отношения не будут удалены из фактической схемы базы данных).

0 голосов
/ 14 ноября 2011

Похоже, что EF создал отношения в неправильном направлении.

В классе User должен быть номер организации, а не идентификатор организации.

В классе организации должен быть список пользователей.

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