InvalidCastException в модели LINQ-2-SQL при вставке - PullRequest
0 голосов
/ 24 февраля 2011

При попытке вставить элемент в базу данных с помощью 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., но в нем не указано, какое свойство вызывает проблему.Может кто-нибудь определить, какая собственность вызывает у меня проблемы?

Ответы [ 3 ]

0 голосов
/ 24 февраля 2011

Я бросил стол, воссоздал его, обновил свою модель, и все начало работать без необходимости что-либо менять. Я не думаю, что что-то изменилось, но ясно .NET снова меня любит.

0 голосов
/ 23 сентября 2014

Я решил эту проблему, установив для свойства Server Data Type значение uniqueidentifier в моем DBML.

0 голосов
/ 24 февраля 2011

Возможно, вы захотите либо:

1) Измените тип данных TimeStamp на DateTime2 - только для SQL Server 2008.

или

2) Изменить timer.TimeStamp = DateTime.UtcNow; на timer.TimeStamp = DateTime.Now.ToUniversalTime();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...