Answer the question
In order to leave comments, you need to log in
EntityFramework, Linq and very tricky entities. Question on correct writing of CRUD methods in MVC
There are several classes
// основной класс
public MainClass
{
public MainClassId { get; set; }
...
// отношение один ко многим в FluentApi
public virtual List<SecondClass> SecondClass { get; set; }
}
// список из некоторых свойств для основного обьекта
public SecondClass
{
public SecondClassId {get; set; }
..
// отношение один к одному
[XmlIgnore, ForeignKey("ThirdClass")]
public Guid ThirdClassId { get; set; }
public virtual ThirdClass ThirdClass { get; set; }
}
// категория для SecondClass
public class ThirdClass
{
public Guid ThirdClassId { get; set; }
....
}
Answer the question
In order to leave comments, you need to log in
Let's start from the beginning:
Small amendments to the class, so that it is clear what and how it should actually be
// основной класс
public MainClass
{
public MainClassId { get; set; }
...
// отношение один ко многим в FluentApi
[InverseProperty("MainClassProp")] //обратная связь
public virtual List<SecondClass> SecondClass { get; set; }
}
// список из некоторых свойств для основного обьекта
public SecondClass
{
public SecondClassId {get; set; }
[InversePropert("SecondClass")] //указываем на связь со списком
public MainClass MainClassProp
..
// отношение один к одному
[XmlIgnore]
public Guid ThirdClassId { get; set; }
[ForeignKey("ThirdClass")] //правильно делать так - указываем на переменную, того же типа, что и ключевое в ThirdClass, для MainClass тоже можно сделать
public virtual ThirdClass ThirdClass { get; set; }
}
// категория для SecondClass
public class ThirdClass
{
public Guid ThirdClassId { get; set; }
....
}
db.MainClasses.Include(s => s.SecondClass).Where(cl => cl.SecondClass.Any(s => s.ThirdClassId == %что-то%);
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//тут строится такая конструкция
modelBuilder.Entity<MainClass>().HasMany(m => m.SecondClass).WithRequired(s => s.MainClassProp).WIllCascadeOnDelete();
//а чтобы не удалялись Third class
modelBuilder.Entity<SecondClass>().HasOptional(или Required)(s => s.ThirdClass).WillCascadeOnDelete(false);
}
var res = db.ThirdClasses.FirstOrDefault(t => t.ThirdClassId ==%giud%);
if (res != null)
secondClass.ThirdClass = res;
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question