SubmitChanges上的错误“数据类型ntext和nvarchar不兼容”

时间:2010-11-17 18:40:26

标签: c# sql-server linq-to-sql

我最近在尝试更新预先存在的记录时遇到此错误:

  

数据类型ntext和nvarchar在等于运算符中不兼容。

     

描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

     

异常详细信息:System.Data.SqlClient.SqlException:数据类型ntext和nvarchar在等于运算符中不兼容。

     

来源错误:

     

第108行:streamEntryTable.Context.Refresh(RefreshMode.KeepCurrentValues,entry);

     

第109行:}

     

第110行:streamEntryTable.Context.SubmitChanges();

     

源文件:C:\ Path \ Genesis.Domain \ Concrete \ SqlGenesisRepositoryEntryPartial.cs行:110

     

堆栈跟踪:       [SqlException(0x80131904):数据类型ntext和nvarchar在等于运算符中不兼容。]

什么会引发这样的比较?我之前已经能够在这张桌子上执行CRUD功能了。

什么可以触发这种比较?

修改

linqTOsql的C#POCO:

[Table]
public class StreamEntry
{
    [HiddenInput(DisplayValue = false)]
    [Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert)]
    public long seID { get; set; }

    [Required(ErrorMessage = "Please enter an entry URL.")]
    [Column]
    public string seUrl { get; set; }

    [Required(ErrorMessage = "Please enter an entry headline.")]
    [Column]
    public string seHeadline { get; set; }
    [Column]
    public string seBody { get; set; }
    [Column]
    public string seDescription { get; set; }
    [Column]
    public string seKeywords { get; set; }
    [Column]
    public string seTitle { get; set; }
    [Column]
    public long seOrder { get; set; }
    [Column]
    public DateTime seDateCreated { get; set; }
    [Column]
    public DateTime seDateModified { get; set; }
    [Column]
    public long StreamID { get; set; } // FK
    [Column]
    public bool AllowComments { get; set; }

    // Relationship (many entries to one stream)
    // using EntityRef<Stream> and ThisKey
    // which is "This" table FK
    private EntityRef<Stream> _Stream;
    [System.Data.Linq.Mapping.Association(Storage = "_Stream", ThisKey = "StreamID")]
    public Stream Stream
    {
        get { return this._Stream.Entity; }
        set { this._Stream.Entity = value; }
    }

    // relationship (one entry to many FieldInstances) 
    // uses EntitySet<FieldInstance> and OtherKey for the FK in FieldInstance 
    // which is the "Other" table.
    private EntitySet<FieldInstance> _FieldInstance = new EntitySet<FieldInstance>();
    [System.Data.Linq.Mapping.Association(Storage = "_FieldInstance", OtherKey = "fiStreamEntryID")]
    public EntitySet<FieldInstance> FieldInstance
    {
        get { return this._FieldInstance; }
        set { this._FieldInstance.Assign(value); }
    }

}

StreamEntry表定义

  

seID bigint notnull

     

seUrl nvarchar(255)notnull

     

seHeadline nvarchar(255)notnull

     

seBody ntext nullable

     

seDescription nvarchar(255)nullable

     

seKeywords nvarchar(255)nullable

     

seTitle nvarchar(255)nullable

     

seOrder bigint notnnull

     

seDateCreated datetime notnull

     

seDateModified datetime notnull

     

StreamID bigint notnull

     

AllowComments位无效

Edit2 - 有关错误的更多详细信息

如果SubmitChanges()表单字段为空,我可以成功seBody。如果我向seBody添加文字,则会正确更新。但是,从那时起,任何尝试SubmitChanges()都会返回错误。

1 个答案:

答案 0 :(得分:1)

感谢您在我的问题评论中提供的所有讨论和信息。初步解决方案是将ntext字段更改为nvarchar(MAX)字段。这照顾了所有的错误。这并不意味着一旦我弄清楚如何使用像l2sprof.com这样的工具来查看生成的SQL,我就不会重新审视这个问题。

但是,暂时使用nvarchar(MAX)来解决问题。