Witam,
Mój problem polega na tym że nie mogę pojąc dlaczego otrzymuję błąd z kodu pokazanego poniżej, gdyz z góry wydaje sie że jest wszystko ok:
public List<ClassroomViewModel> GetClassrooms(int TypeSchool)
{
using (var db = this.context.CreateNew())
{
var guery = db.Classrooms
.Where(x => x.UserId == this.UserId && x.TypeSchool == TypeSchool)
.Select(x => new ClassroomViewModel
{
Classroom_Id = x.Classroom_Id,
Name = x.Name,
ShortName = x.ShortName,
Capacity = x.Capacity,
Subject = x.Subject_Id == null ? null : subjects.GetSubjectById((int)x.Subject_Id) // w tym miejscu wyswietla sie bład
}).ToList();
return guery;
}
}
Ten bład otrzymuje z kodu powyżej
Unable to create a null constant value of type 'zaplanuj.eu.Areas.Generator.Models.SchoolData.SubjectViewModel'. Only entity types, enumeration types or primitive types are supported in this context.
A ten gdy do Subject przypiszę na sztywno null
Unable to create a null constant value of type 'zaplanuj.eu.Areas.Generator.Models.SchoolData.SubjectViewModel'. Only entity types, enumeration types or primitive types are supported in this context.
gdy do zmiennej Subject stworze nowy obiekt i przypisze mu go na sztywno wszystko jest w porządku, problem jest wtedy gdy do zmiennej przypisuje warunek taki jak powyżej w kodzie, także wtedy gdy na sztywno dam "Subject = null" bądź samą metodę "Subject = subjects.GetSubjectById(1014)". Nie wiem co jest grane i w czym tkwi problem, podejrzewam że chodzi o mały szczegół którego nie mogę dojrzeć, dziwi mnie bardzo to że gdy na sztywno przypisze null też jest błąd co całkowicie mnie zbija z tropu.
Poniżej dalsza cześć kodu potrzebna do analizy:
public class ClassroomViewModel
{
[HiddenInput(DisplayValue = false)]
public int Classroom_Id { get; set; }
[Required]
[Display(Name = "Nazwa")]
[StringLength(30)]
public string Name { get; set; }
[Required]
[Display(Name = "Skrót")]
[StringLength(10)]
public string ShortName { get; set; }
[Required]
[Display(Name = "Pojemność klasy")]
[Range(1, 999, ErrorMessage="Pojemność twojej klasy jest niepoprawna")]
public int Capacity { get; set; }
[Display(Name = "Przeznaczenie klasy")]
public SubjectViewModel Subject { get; set; }
[Display(Name = "Lista przedmiotów")]
public List<SubjectViewModel> Subejcts { get; set; }
}
public class SubjectViewModel
{
[HiddenInput(DisplayValue = false)]
public int Subject_Id { get; set; }
[Required]
[Display(Name = "Nazwa")]
[StringLength(30)]
public string Name { get; set; }
[Required]
[Display(Name = "Skrót")]
[StringLength(10)]
public string ShortName { get; set; }
[Display(Name = "Opiekun grupy")]
public bool GroupLeader { get; set; }
}
Metoda zwracająca odpowiedni subject:
public SubjectViewModel GetSubjectById(int Subject_Id)
{
using (var db = this.context.CreateNew())
{
var guery = db.Subjects
.Where(x => x.Subject_Id == Subject_Id)
.Select(x => new SubjectViewModel
{
Subject_Id = x.Subject_Id,
Name = x.Name,
ShortName = x.ShortName,
GroupLeader = x.GroupLeader
}).SingleOrDefault();
return guery;
}
}
W razie potrzeby dodaję tez model z EF
public Classrooms()
{
this.Subjects1 = new HashSet<Subjects>();
}
public int Classroom_Id { get; set; }
public int UserId { get; set; }
public int TypeSchool { get; set; }
public string Name { get; set; }
public string ShortName { get; set; }
public int Capacity { get; set; }
public Nullable<int> Subject_Id { get; set; }
public virtual Subjects Subjects { get; set; }
}