Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Новый топик    Ответить
 EF: Связь один-ко-многим со значениями null  [new]
SIW
Member

Откуда:
Сообщений: 4
Всем добрый день. У меня возникла проблема с организацией связей в БД.
Пытаюсь в частности организовать связь один-ко-многим между двумя таблицами с нулевыми значениями.
Связь делаю через вторичный ключ.
Есть класс:
public class Company
    {
        // другие свойства

        [Required(AllowEmptyStrings = true)]
        [DisplayFormat(ConvertEmptyStringToNull = false)]
        public int? ManagerID { get; set; } 
        public virtual Person Managers {get; set;}
    }  

public class Person
    {
        // другие свойства

        public virtual ICollection<Company> ManagersList { get; set; }
    }



 public class DB : DbContext
    {
        public DB()
            : base("DBConnection")
        {
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
             modelBuilder.Entity<Company>().HasRequired<Person>(s => s.Managers)
            .WithMany(s => s.ManagersList).HasForeignKey(s => s.ManagerID);
        }
        public DbSet<Company> Company { get; set; }
        public DbSet<Person> Person { get; set; }
       //Другие сущности
    }
             


При этом в создаваемой базе на поле ManagerID стоит значение Not Null, соответственно организацию без менеджера я создать не могу, а надо. При попытке создать организацию с пустым полем менеджера вылетает сообщение валидации.

Вариант принудительного указания параметров запрета каскадного удаления и пометки поля как необязательное не помогают. modelBuilder.Entity<Company>().Property(t => t.ParentId).IsOptional();
modelBuilder.Entity<Company>().HasRequired<Company>(s => s.Parent).WithMany(s => s.ChildList).HasForeignKey(s => s.ParentId).WillCascadeOnDelete(false)

Помогите решить проблему
16 апр 14, 10:12    [15888913]     Ответить | Цитировать Сообщить модератору
 Re: EF: Связь один-ко-многим со значениями null  [new]
Lelouch
Member

Откуда: Москва
Сообщений: 1879
SIW,

Замените HasRequired на HasOptional
http://msdn.microsoft.com/ru-ru/library/gg671230(v=vs.113).aspx
16 апр 14, 13:15    [15890337]     Ответить | Цитировать Сообщить модератору
 Re: EF: Связь один-ко-многим со значениями null  [new]
SIW
Member

Откуда:
Сообщений: 4
Lelouch,

Спасибо. Теперь буду знать о этом операторе.

Только теперь другая проблема возникла
Перестала корректно работать выборка списка компаний для отображения:

         public ActionResult Index()
        {
            var company = db.Company.Include(c => c.Manager);
            return View(company.ToList());
        }


И соответственно отображение сего списка в DropDownList.

Мысли у меня по этому поводу отсутствуют. :(

PS Контроллер и вьюхи сгенерированы автоматически (для отладки и корректной работы модели). За логику проекта еще не брался - модель допиливаю.
16 апр 14, 14:50    [15891028]     Ответить | Цитировать Сообщить модератору
 Re: EF: Связь один-ко-многим со значениями null  [new]
Lelouch
Member

Откуда: Москва
Сообщений: 1879
SIW,

что именно не работает? не выполняется Include?
16 апр 14, 18:38    [15892523]     Ответить | Цитировать Сообщить модератору
 Re: EF: Связь один-ко-многим со значениями null  [new]
SIW
Member

Откуда:
Сообщений: 4
Lelouch,

Да, ругается на Include
Выдает ошибку: "Sequence contains no elements "
17 апр 14, 06:59    [15894166]     Ответить | Цитировать Сообщить модератору
 Re: EF: Связь один-ко-многим со значениями null  [new]
SIW
Member

Откуда:
Сообщений: 4
Спасибо всем за помощь.

Проблему решил, она оказалась не в коде.

Полностью переинициализировал БД - проблема решилась....
18 апр 14, 12:52    [15900693]     Ответить | Цитировать Сообщить модератору
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Ответить