【问题标题】:Linq-To-SQL Invalid Cast on insert, not on updateLinq-To-SQL 插入时的无效转换,而不是更新时
【发布时间】:2009-06-15 09:22:44
【问题描述】:

大家好,我在使用 Linq-To-SQL 时遇到了奇怪的事情

我正在构建一个 postit 系统,允许人们制作 postit 并将它们附加到多个对象上。用于此的数据库是一个包含 postit 本身(id、message 等)的表和一个包含 postit 附加到的记录的链接表。

我正在经历的奇怪的事情如下。 当我从数据库中检索一个对象(使用 Linq-To-SQL),做一些数据更改并再次提交时,我没有遇到任何麻烦。 然而,当我尝试制作一个新的时,我在 datacontext 的 Submitchanges 方法中遇到异常:Specified Cast is not valid.

我一直在网上寻找,主要是涉及到映射的一些变化,但这不应该是这样,因为我可以毫无问题地更新。

T_PostIt np = new T_PostIt();
                np.CreatedOn = DateTime.Now;
                np.CreatedBy = Request.ServerVariables["REMOTE_USER"].ToString();
                np.MarkedForDeletion = false;
                np.Message = txtNewPostitMessage.Text;
                np.ModifiedBy = Request.ServerVariables["REMOTE_USER"].ToString();                    
                foreach (int i in ServerIds)
                {
                    T_PostIt_Link pil = new T_PostIt_Link();
                    pil.LinkType = 'S';
                    pil.LinkID = i;
                    pil.MarkedForDeletion = false;
                    np.T_PostIt_Links.Add(pil);        
                }
                dc.T_PostIts.InsertOnSubmit(np);
                dc.SubmitChanges();

我使用上面的代码,但似乎无法理解我做错了什么。

帮助任何人?

【问题讨论】:

    标签: c# linq-to-sql


    【解决方案1】:

    您是否尝试过一一更新属性,然后将更改保存回数据库?可能只有当一个特定值发生更改时,更新实体才会失败。如果我可能猜到,可能是CreatedOn 的值无法转换为数据库中的有效日期时间(由于文化设置)。这可以解释为什么更新正常 - 您没有在此处更改 CreatedOn 的值。但是,在插入新实体时,您会这样做。

    编辑:也许this 是您面临的问题。另外,请务必阅读this thread,其中主题起始者最终指向第一个线程,其中提到这是 Linq2Sql 中的一个明显错误。

    【讨论】:

    • 嗯,好吧,我的猜测结果并不正确 :-) 我用一些链接更新了我的答案。在使用 Linq2Sql 时,您可能会遇到与某些人相同的问题。我希望它有所帮助。
    猜你喜欢
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-02
    • 1970-01-01
    相关资源
    最近更新 更多