【发布时间】:2010-11-17 18:40:26
【问题描述】:
我最近在尝试更新预先存在的记录时开始收到此错误:
数据类型 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 可为空
seDescription nvarchar(255) 可为空
seKeywords nvarchar(255) 可以为空
setTitle nvarchar(255) 可以为空
seOrder bigint notnull
seDateCreated 日期时间不为空
seDateModified 日期时间不为空
StreamID bigint notnull
AllowComments 位不为空
Edit2 - 有关错误的更多详细信息
如果seBody 表单字段为空,我可以成功SubmitChanges()。如果我向seBody 添加文本,它将正确更新。但是,从那时起,任何对SubmitChanges() 的尝试都会返回上述错误。
【问题讨论】:
-
表架构有变化吗?听起来您的一种字段类型已更改。
-
你的查询和表结构是什么?
-
@leppie:请进一步解释...
-
@Coding Gorilla - 是的......数据库中的表发生了变化,linq 正在使用的 POCO 表对象也发生了变化......但这些变化反映在数据库和 C# 代码中。
-
LINQ-to-SQL (AFAIK) 不支持“POCO”,所以我不确定您是否只是在混合您的术语。但这听起来确实有些不同步。虽然没有看到一些代码和模型,但很难说。
标签: c# sql-server linq-to-sql