C# “错误”;数据类型ntext和nvarchar不兼容;论提交变更
我最近在尝试更新预先存在的记录时开始出现此错误: 在等于运算符中,数据类型ntext和nvarchar不兼容 描述:执行当前web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误的更多信息以及错误在代码中的起源 异常详细信息:System.Data.SqlClient.SqlException:数据类型ntext和nvarchar在等于运算符中不兼容 源错误: 第108行:streamEntryTable.Context.Refresh(RefreshMode.KeepCurrentValues,条目) 第109行:} 第110行:streamEntryTable.Context.SubmitChanges() 源文件:C:\Path\Genesis.Domain\Concrete\SqlGenesisRepositoryEntryPartial.cs行:110 堆栈跟踪: [SqlException(0x80131904):数据类型ntext和nvarchar在等于运算符中不兼容。] 什么会引发这样的比较?我以前已经能够在此表上执行CRUD函数 是什么引发了这种比较 编辑 linqTOsql的C#POCO:C# “错误”;数据类型ntext和nvarchar不兼容;论提交变更,c#,sql-server,linq-to-sql,C#,Sql Server,Linq To Sql,我最近在尝试更新预先存在的记录时开始出现此错误: 在等于运算符中,数据类型ntext和nvarchar不兼容 描述:执行当前web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误的更多信息以及错误在代码中的起源 异常详细信息:System.Data.SqlClient.SqlException:数据类型ntext和nvarchar在等于运算符中不兼容 源错误: 第108行:streamEntryTable.Context.Refresh(RefreshMode.KeepCurrentVal
[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); }
}
}
[表格]
公共类流媒体
{
[HiddenInput(DisplayValue=false)]
[列(IsPrimaryKey=true,IsDbGenerated=true,AutoSync=AutoSync.OnInsert)]
公共长seID{get;set;}
[必需(ErrorMessage=“请输入输入URL。”)]
[专栏]
公共字符串seUrl{get;set;}
[必需(ErrorMessage=“请输入条目标题。”)]
[专栏]
公共字符串seHeadline{get;set;}
[专栏]
公共字符串seBody{get;set;}
[专栏]
公共字符串描述{get;set;}
[专栏]
公共字符串seKeywords{get;set;}
[专栏]
公共字符串seTitle{get;set;}
[专栏]
公共长序列{get;set;}
[专栏]
公共日期时间{get;set;}
[专栏]
公共日期时间已修改{get;set;}
[专栏]
公共长流ID{get;set;}//FK
[专栏]
公共布尔允许元素{get;set;}
//关系(多个条目到一个流)
//使用EntityRef和ThisKey
//哪个是“这个”表FK
私有实体引用流;
[System.Data.Linq.Mapping.Association(Storage=“\u Stream”,ThisKey=“StreamID”)]
公共溪流
{
获取{返回此。\u Stream.Entity;}
设置{this.\u Stream.Entity=value;}
}
//关系(一个条目到多个FieldInstance)
//在FieldInstance中为FK使用EntitySet和OtherKey
//哪一张是“另一张”桌子。
私有EntitySet _FieldInstance=新EntitySet();
[System.Data.Linq.Mapping.Association(Storage=“\u FieldInstance”,OtherKey=“fiStreamEntryID”)]
公共实体集字段实例
{
获取{返回此。\u FieldInstance;}
设置{this._FieldInstance.Assign(value);}
}
}
StreamEntry表定义
seID bigint notnull
seUrl nvarchar(255)notnull
seHeadline nvarchar(255)notnull
seBody ntext可为空
seDescription nvarchar(255)可为空
SENVARCHAR(255)可为空
seTitle nvarchar(255)可为空
seOrder bigint notnull
已创建日期时间notnull
已修改日期时间notnull
StreamID bigint notnull
AllowComments位不为空
Edit2-有关错误的更多详细信息
如果
seBody
表单字段为空,我可以成功地SubmitChanges()
。如果我向seBody
添加文本,它将正确更新。但是,从这一点来看,任何试图提交更改()的尝试都会返回上述错误。感谢您在我的问题评论中提供的所有讨论和信息。初步解决方案是将ntext
字段更改为nvarchar(MAX)
字段。这解决了所有的错误。这并不意味着,一旦我了解了如何使用l2sprof.com之类的工具来查看生成的SQL,我就不会再讨论这个问题
但是,目前,这个问题是通过使用nvarchar(MAX)
来解决的。谢谢您在我的问题评论中提供的所有讨论和信息。初步解决方案是将ntext
字段更改为nvarchar(MAX)
字段。这解决了所有的错误。这并不意味着,一旦我了解了如何使用l2sprof.com之类的工具来查看生成的SQL,我就不会再讨论这个问题
但是,目前,这个问题是通过使用nvarchar(MAX)
解决的,表模式是否更改了?听起来你的一个字段类型改变了。你的查询和表结构是什么?@leppie:请进一步解释…@Coding Gorilla-是的。。。数据库中的表已更改,linq使用的POCO表对象也已更改。。。但是这些变化反映在数据库中,而C#code.LINQ-to-SQL(AFAIK)不支持“POCO”,因此我不确定您是否只是在混用术语。但这听起来确实有点不同步。但是如果没有看到一些代码和模型,就很难说了。表模式是否发生了变化?听起来你的一个字段类型改变了。你的查询和表结构是什么?@leppie:请进一步解释…@Coding Gorilla-是的。。。数据库中的表已更改,linq使用的POCO表对象也已更改。。。但是这些变化反映在数据库中,而C#code.LINQ-to-SQL(AFAIK)不支持“POCO”,因此我不确定您是否只是在混用术语。但这听起来确实有点不同步。但是如果没有看到一些代码和模型,就很难说了。如果您真的需要使用文本数据,这是正确的方法