Ошибка при создании контроллера с пользовательским типом с использованием Entity Framework MVC ASP.NET

Я пытаюсь создать контроллер с моделью, в которой есть пользовательские типы...

У меня есть основной класс с идентификатором и типом «Работа», в котором я объявил три свойства, одно из которых зависит от двух других. Затем я создал тип 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);
    }

}


}

person johndoesnow    schedule 12.07.2016    source источник
comment
sum — это вычисляемое свойство, доступное только для чтения, поэтому его нельзя сопоставить с полем базы данных. Вы пробовали предлагаемый атрибут [NotMapped]? Кроме того, почему вы устанавливаете расчетное значение isRequired?   -  person Paul Abbott    schedule 12.07.2016


Ответы (1)


Сумма - это не простой тип (столбец в базе данных), это функция данных (вычисленная из других свойств), вам не нужно хранить ее в базе данных.

[ComplexType]
public class Math
{

    public int first { get; set; }
    public int second { get; set; }

    [NotMapped] 
    public int sum
    {
        get
        {
           return first + second;
        }
    }
}

Удалите эту строку:

modelBuilder.Entity<Work>()
                    .Property(c => c.Maths.sum).IsRequired();
person Bassam Alugili    schedule 12.07.2016