Я пытаюсь создать контроллер с моделью, в которой есть пользовательские типы...
У меня есть основной класс с идентификатором и типом «Работа», в котором я объявил три свойства, одно из которых зависит от двух других. Затем я создал тип dbset. Мои свойства сопоставления неверны?
Я получаю следующую ошибку: Произошла ошибка при запуске выбранного генератора кода: «Невозможно получить метаданные для ‘Stack.Models.Work’». сумма свойств не является объявленным свойством типа Math. Убедитесь, что свойство не было явно исключено из модели с помощью аннотации данных Ignore Method или NotMappedAttribute. Убедитесь, что это допустимое примитивное свойство.
namespace stack.Models
{
public class Work
{
[Key]
public int ID { get; set; }
public Work ()
{
this.Maths = new Math();
}
public Math Maths { get; set; }
}
[ComplexType]
public class Math
{
public int first { get; set; }
public int second { get; set; }
public int sum
{
get
{
try
{
return first + second;
}
catch
{
return 0;
}
}
}
}
public class WorkDBContext: DbContext
{
public DbSet<Work> Working { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Work>()
.Property(c => c.Maths.first).IsRequired();
modelBuilder.Entity<Work>()
.Property(c => c.Maths.second).IsRequired();
modelBuilder.Entity<Work>()
.Property(c => c.Maths.sum).IsRequired();
base.OnModelCreating(modelBuilder);
}
}
}
sum
— это вычисляемое свойство, доступное только для чтения, поэтому его нельзя сопоставить с полем базы данных. Вы пробовали предлагаемый атрибут[NotMapped]
? Кроме того, почему вы устанавливаете расчетное значениеisRequired
? - person Paul Abbott   schedule 12.07.2016