繁体   English   中英

插入时LINQ-2-SQL模型上的InvalidCastException

[英]InvalidCastException on LINQ-2-SQL Model When Inserting

尝试使用LINQ-to-SQL将项目插入数据库时​​,出现InvalidCastException。 据我所知,一切都是正确的类型。

SQL表是(精简的):

CREATE TABLE [dbo].[Timer](
    [TimerId] [int] IDENTITY(1,1) NOT NULL,
    [UserName] [nvarchar](64) NOT NULL,
    [TimeStamp] [datetime] NOT NULL,
    [SessionId] [uniqueidentifier] NOT NULL,
    [Action] [nvarchar](50) NOT NULL,
    [ActionId] [uniqueidentifier] NOT NULL,
    [Description] [nvarchar](256) NOT NULL,
 CONSTRAINT [PK_Timer] PRIMARY KEY CLUSTERED 
(
    [TimerId] ASC
)

LINQ模型是(删节的):

public partial class Timer
{

    [Column(AutoSync=AutoSync.OnInsert, DbType="Int NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)]
    public int TimerId { get; set; }

    [Column(DbType = "NVarChar(64) NOT NULL", CanBeNull = false)]
    public string UserName { get; set; }

    [Column(DbType = "DateTime NOT NULL")]
    public DateTime TimeStamp { get; set; }

    [Column(DbType = "UniqueIdentifier NOT NULL")]
    public Guid SessionId { get; set; }

    [Column(DbType = "NVarChar(50) NOT NULL", CanBeNull = false)]
    public string Action { get; set; }

    [Column(DbType = "UniqueIdentifier NOT NULL")]
    public Guid ActionId { get; set; }

    [Column(DbType = "NVarChar(256) NOT NULL", CanBeNull = false)]
    public string Description { get; set; }

}

违规代码为(删节):

using (var ctx = new MyDataContext())
{
    var timer = new Timer();
    timer.Action = "Start";
    timer.ActionId = Guid.NewGuid();
    timer.Description = "foo";
    timer.SessionId = Guid.NewGuid();
    timer.TimeStamp = DateTime.UtcNow;
    timer.UserName = "foo";

    ctx.Timers.InsertOnSubmit(timer);
    ctx.SubmitChanges();  // exception thrown here
}

错误消息显示System.InvalidCastException: Specified cast is not valid. 但是它没有提到哪个属性导致了问题。 谁能找到导致我麻烦的财产?

我通过在DBML中将Server Data Type属性设置为uniqueidentifier解决了该问题。

您可能想要:

1)将TimeStamp数据类型更改为DateTime2-仅SQL Server 2008。

要么

2)更改timer.TimeStamp = DateTime.UtcNow; timer.TimeStamp = DateTime.Now.ToUniversalTime();

我放下桌子,重新创建它,刷新我的模型,一切开始工作,而无需更改其他任何东西。 我认为没有任何变化,但是.NET显然又喜欢我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM