2014-01-09 2 views
1

Я унаследовал базу данных, с которой мне нужно запросить.Ошибка при попытке прочитать существующую базу данных из MVC/Linq

Однако, когда я запускаю мой код ниже, я получаю ошибку:

{"The 'solution' property on 'QA' could not be set to a 'System.Byte' value. You must set this property to a non-null value of type 'System.Int32'. "}

определения таблицы:

CREATE TABLE [dbo].[qa](
[id] [int] IDENTITY(1,1) NOT NULL, 
[r3_3] [tinyint] NULL, 
[r6_3] [tinyint] NULL, 
[r6_13] [tinyint] NULL, 
[datesaved] [datetime] NULL 
CONSTRAINT [PK_qa] PRIMARY KEY CLUSTERED 
(
[id] ASC 
) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,   ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

Так r3_3, R_3, r6_13 может содержать 1, 0 или null.

Мой контроллер:

// GET: /QA/ 
    public ActionResult Index() 
    { 
     var qas = db.QAs; 
     return View(qas.ToList()); 
    } 

Модель:

public class QA 
{ 
    public int Id { get; set; } 
    public DateTime date { get; set; } 
    // solution 
    [Column("r3_3")] 
    public Int32? solution { get; set; } 
    // priority 
    [Column("r6_3")] 
    public Int32? priority { get; set; } 
    // assignment 
    [Column("r6_13")] 
    public Int32? assignment { get; set; } 
} 

Учитывая, я не могу изменить базу данных, как я могу изменить модель или мой контроллер, чтобы быть в состоянии тянуть обратно данные в этой таблице?

Спасибо, Марк

ответ

5

tynint должен быть отображен в .net байт, как указано в msdn

Таким образом, вы должны иметь

[Column("r3_3")] 
public byte? solution { get; set; } 

Если вы хотите работать с другим междунар ? (который не был бы в дБ), вы можете добавить

[NotMapped] 
    public int? IntSolution { 
     get {return solution.HasValue (int?)Convert.ToInt32(solution.Value) : null;} 
     set { solution = value.HasValue ? (byte?)Convert.ToByte(value.Value) : null; 
     } 
    } 
Смежные вопросы