代码之家  ›  专栏  ›  技术社区  ›  quakkels

提交更改时出现错误“数据类型ntext和nvarchar不兼容”

  •  1
  • quakkels  · 技术社区  · 14 年前

    我最近在尝试更新一个预先存在的记录时开始出错:

    在等于运算符中,数据类型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不为空

    seUrl nvarchar(255)不为空

    seHeadline nvarchar(255)不为空

    seBody ntext可为空

    seDescription nvarchar(255)可为空

    seKeywords nvarchar(255)可为空

    seTitle nvarchar(255)可为空

    seOrder bigint不为空

    镇静处理日期时间不为空

    镇静修改日期时间不为空

    StreamID bigint不为空

    AllowComments位不为空

    Edit2-有关错误的详细信息

    我能成功 SubmitChanges() 如果 seBody 表单域为空。如果我将文本添加到 皮博迪 它将正确更新。但是,从那时起,任何试图 提交更改() 返回上面的错误。

    1 回复  |  直到 14 年前
        1
  •  1
  •   quakkels    14 年前

    感谢您在我的问题评论中所作的讨论和提供的信息。初步的解决方案是改变 ntext 字段到 nvarchar(MAX) 字段。把所有的错误都解决了。这并不意味着一旦我知道了如何使用像l2sprof.com这样的工具来查看生成的SQL,我就不会再讨论这个问题了。

    但是,就目前而言,这个问题是通过使用 nvarchar(最大值) .