2016-05-28 2 views
-2

Я использую MVC с Entity Framework и получает следующую ошибку.Entity Framework 6 Не удается найти столбец ошибок

Указанный литой из материализованного типа «System.Int64» в тип «System.String» недопустим.

Ошибка вполне понятна и проста в разрешении, но проблема в том, что я столкнулся с тем, что в моем SQL-запросе у меня много столбцов, из деталей ошибки я не вижу, какой столбец имеет эту конкретную проблему, у меня есть чтобы пройти через все столбцы один за другим.

string Query= "select id,claim_no,emp_id,dept_id,location_id from staff"; 
var ctx = new TIAEntities() 
ctx.Database.SqlQuery<ORM>(Query).ToList() 

Я также просмотрел все детали в часах, но не могу найти название столбца.

Модель: -

public class ORM 
     { 

      public Int64 id { get; set; } 
      public String claim_no { get; set; } 
      public Int64 emp_id { get; set; } 
      public Int64 dept_id { get; set; } 
      public Int64 location_id { get; set; } 
    } 
+0

Как мы должны найти имя столбца для вас, если у нас нет модели, ни определение таблицы. Добавьте их в свой вопрос. [Вы должны прочитать это] (https://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/). – Nasreddine

+0

Я отредактировал, пожалуйста, просмотрите сейчас. –

+0

Скорее всего, поскольку он говорит, что он не может конвертировать из 'Int64' в' String', 'Claim_no', скорее всего, сохраняется как bigint. – Sam

ответ

0

Вы можете использовать эти решения:

var query = from o in ctx.ORM 
      select new 
      { 
       id = o.id, 
       claim_no = o.claim_no, 
       emp_id = o.emp_id, 
       dept_id = o.dept_id, 
       location_id = o.location_id 
      }; 

или

var query = ctx.ORM.Select(o => new ORM 
      { 
       id = o.id, 
       claim_no = o.claim_no, 
       emp_id = o.emp_id, 
       dept_id = o.dept_id, 
       location_id = o.location_id 
      }); 

Введите запрос является:
IQueryable <> запрос

Для находки, которая одна из этих свойств поднять ошибку, чтобы использовать это решение

  1. В методе ActionResult добавить еще для «если (ModelState.IsValid)», как это, чтобы получить проблемы с точкой зрения в режиме обратной передачи и установить контрольную точку в другом разделе и после остановки в точке останова используйте немедленное окно для значения ошибок, подобных этим ошибкам [0].

    if (ModelState.IsValid) 
        { 
         ... 
        } 
        else 
        { 
         var errors = ModelState.Where(x => x.Value.Errors.Count > 0).Select(x => new 
         { 
          x.Key, 
          x.Value.Value, 
          x.Value.Errors 
         }).ToArray(); 
        } 
    
  2. Используйте эту попытку, чтобы найти ошибку свойств и ударить ее.

    try 
        { 
         var query = from o in ctx.ORM 
          select new 
          { 
           id = o.id, 
           claim_no = o.claim_no, 
           emp_id = o.emp_id, 
           dept_id = o.dept_id, 
           location_id = o.location_id 
          }; 
        } 
        catch (DbEntityValidationException ex) 
        { 
         var errorMessages = ex.EntityValidationErrors.SelectMany(x => x.ValidationErrors).Select(x => x.ErrorMessage); 
         var fullErrorMessage = string.Join("; ", errorMessages); 
         var exceptionMessage = string.Concat(ex.Message, " The validation errors are: ", fullErrorMessage); 
         throw new DbEntityValidationException(exceptionMessage, ex.EntityValidationErrors); 
        } 
    
Смежные вопросы