Linq Time(7)和TimeSpan Mapping

时间:2013-05-07 22:27:16

标签: c# linq entity-framework sql-server-2012

我正在尝试将记录插入到名为Test的表中,我正在使用LINQ技术:

问题是我的表中有一个time列,其类型为Time(7),但当我尝试向表中插入数据时,我收到此错误:

Operand type clash: bigint is incompatible with time

这是我在SQL中的test表设计:

Table 'Test' in SQL Server 2012

我在C#中的表实现:

[Table(Name = "Test")]
class TableTest
{
    private int _id;
    [Column(IsPrimaryKey = true, Name = "id", Storage = "_id")]
    public int id
    {
        get { return _id; }
        set { _id = value; }
    }
    private TimeSpan _time;
    [Column(Name = "time", Storage = "_time")]
    public TimeSpan time
    {
        get { return _time; }
        set { _time = value; }
    }
}

在这里我尝试插入我的记录:

    DataContext dc = new DataContext(@"Data Source=.;Initial Catalog=DBTest;Integrated Security=True");

    private void button1_Click(object sender, EventArgs e)
    {
        TableTest t = new TableTest();
        t.id = 1;
        t.time = new TimeSpan(7, 30, 0);
        Table<TableTest> t_insert = dc.GetTable<TableTest>();
        t_insert.InsertOnSubmit(t);
        dc.SubmitChanges();  // error Here !!!!!
    }

我搜索了每一个地方,我发现只有映射Time() sql类型我应该使用TimeSpan,请告诉我我做错了什么!感谢

1 个答案:

答案 0 :(得分:5)

您的ColumnAttribute需要包含DbType参数。将其设置为

[Column(Storage="_time", DbType="Time NOT NULL")]

您可以在MSDN找到更多信息。