Свойства навигации Entity Framework пустые после назначенного идентификатора - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть следующее

public class MainClass {
    public int Id  { get;set; }

    public virtual ICollection<SubClass> SubClasses { get;set; }
}

public class SubClass {
    public int MainClassId  { get;set; }

    public virtual MainClass MainClass { get;set; }
}

и у меня есть сопоставление настроек для одного ко многим. У меня проблема, когда я делаю это:

var subClass = new SubClass();
subClass.MainClassId = 1;
_dbset.SaveChanges(subClass);

//subClass.MainClass is null after save

Мне нужно будет вызвать мою функцию get с id = 1, только я могу получить сущность MainClass. Кто-нибудь имеет какие-либо идеи, в чем причина этого?

Ответы [ 3 ]

0 голосов
/ 04 сентября 2018

Если вы использовали подход, основанный на коде, возможно, вам не хватает построителя моделей для отношения 1: M. В вашем контексте в методе OnModelCreating вам нужно что-то вроде этого.

modelBuilder.Entity<MainClass>()
      .HasMany(e => e.SubClass)
      .WithRequired(e => e.MainClass)
      .WillCascadeOnDelete();

Следующее, что приходит мне в голову, это то, что вы можете использовать include в вашем методе get, чтобы указать, что вам нужно загрузить все подклассы для основного класса

 context.MainClass.Include(x => x.SubClass).ToList();

или используйте другой метод для загрузки объединенных данных. Ссылка

Я надеюсь, что это поможет вам.

0 голосов
/ 04 сентября 2018

Вы должны добавить subClass к коллекции mainClass's SubClasses и затем сохранить изменения.

Так как,

var mainClass = _dbset.MainClasses.Single(x => x.id == mainClassId); 
var subClass = new SubClass();
//populate subClass without setting mainclassId.
mainClass.SubClasses.Add(subClass);
_dbset.SaveChanges();
0 голосов
/ 04 сентября 2018

Будет работать следующее:

public class MainClass {
    public int Id  { get;set; }

    public virtual  ICollection<SubClass> SubClasses { get;set; }
}

public class SubClass {
    public int Id  { get;set; }
    [ForeignKey("MainClass")]
    public int MainClassId  { get;set; }

    public virtual MainClass MainClass { get;set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...