Тип члена в типе несовместим с типом члена в EF

В моем приложении ASP.NET MVC 5 у меня есть ActionResult в одном из моих контроллеров, который принимает параметры от клиента и возвращает строку JSON. Проблема в том, что я получаю сообщение об ошибке ниже, когда у меня есть нулевые значения в одной или нескольких записях базы данных. Я могу устранить эту ошибку, приведя все нулевые значения к пустой строке в самой таблице представления, но я бы не хотел использовать это как долгосрочное решение.

System.Data.Entity.Core.MappingException: 'Schema specified is not valid. Errors: EFA.msl(16,12) : error 2019: Member Mapping specified is not valid. The type 'Edm.String[Nullable=False,DefaultValue=,MaxLength=,Unicode=,FixedLength=]' of member 'ScheduledStartTime' in type 'EFAModel.v_DemandList' is not compatible with 'SqlServer.datetime[Nullable=False,DefaultValue=,Precision=3]' of member 'ScheduledStartTime' in type 'EFAModel.Store.v_DemandList'.'

Любые рекомендации о том, как следует подходить к этому сценарию?

    [HttpPost]
    public ActionResult GetDemandData()
    {
        //get basic parameters from DataTables
        var draw = Request.Form.GetValues("draw").FirstOrDefault();
        var start = Request.Form.GetValues("start").FirstOrDefault();
        var length = Request.Form.GetValues("length").FirstOrDefault();

        //Find Order Column
        var sortColumn = Request.Form.GetValues("columns[" + Request.Form.GetValues("order[0][column]").FirstOrDefault() + "][name]").FirstOrDefault();
        var sortColumnDir = Request.Form.GetValues("order[0][dir]").FirstOrDefault();

        //find search parameters
        var searchParam = Request.Form.GetValues("search[value]")[0];

        //build return dataset
        int pageSize = length != null ? Convert.ToInt32(length) : 0;
        int skip = start != null ? Convert.ToInt32(start) : 0;
        int recordsTotal = 0;

        //materialize dataset using serch parameters
        EFAEntities efa = new EFAEntities();

        //*** throws error when database table contains null values ***
        var dataSet = (from a in efa.v_DemandList
                       where a.ScheduledStartTime.Contains(searchParam)
                       select a
                       ).Distinct().OrderBy(sortColumn + " " + sortColumnDir);

        recordsTotal = dataSet.Count();
        var data = dataSet.Skip(skip).Take(pageSize).ToList();
        return Json(new { draw = draw, recordsFiltered = recordsTotal, recordsTotal = recordsTotal, data = data }, JsonRequestBehavior.AllowGet);

    }

Пример из таблицы просмотра:

Тип члена в типе несовместим с типом члена в EF

Эта ошибка говорит, что тип данных ScheduledStartTime в EFAEntities является строкой (!?) , но в вашей базе данных это поле имеет тип данных DateTime. Вы пытаетесь совместить их типы данных?!

Hamed Moghadasi 30.01.2019 23:58
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
357
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Дайте значения по умолчанию в вашем методе действия. Если это на самом деле нулевое значение, вы получите значение по умолчанию. Для целых чисел вам необходимо указать тип, допускающий значение NULL.

[HttpPost]
public ActionResult GetDemandData(int? start=0, int? length=0, etc)
{
Ответ принят как подходящий

Сообщение об ошибке понятно! Это ясно говорит о том, что тип ScheduledStartTime в efa.v_DemandList не совпадает с типом ScheduledStartTime в таблице базы данных. В вашем классе модели ScheduledStartTime имеет тип string, но в вашей таблице базы данных это тип datatime.

Поэтому измените тип ScheduledStartTime с string на DateTime в классе модели DemandList.

Затем обновите запрос следующим образом:

var dataSet = (from a in efa.v_DemandList
                   where a.ScheduledStartTime.ToString().Contains(searchParam)
                   select a
                   ).Distinct().OrderBy(sortColumn + " " + sortColumnDir);

Здесь я использую .ToString() с ScheduledStartTime, иначе вы не сможете использовать Contains(), потому что это тип DateTime.

Спасибо. Это оказалось частью 1 проблемы из 2 частей. Другой частью была проблема сопоставления с самой моделью Entity. Я перезагрузил модель данных, и теперь она работает как чемпион.

Steve W 31.01.2019 16:44

Другие вопросы по теме