【发布时间】:2017-07-21 08:07:19
【问题描述】:
我首先使用数据库向导中的 EF 代码在我的项目中创建数据库访问。
我有代表表格的实体:
[Table("__Item")]
public partial class Item
{
[Column(Order = 0)]
[DatabaseGenerated(DatabaseGeneratedOption.Identity), Key()]
public int id { get; set; }
[Key]
[Column(Order = 1, TypeName = "xml")]
public string documentXML { get; set; }
[Key]
[Column(Order = 2)]
public byte XmlVersion { get; set; }
}
我正在尝试添加新记录:
var db = new Model();
db.Item.Add(
new Item()
{
documentXML = "<root/>",
XmlVersion = 3
});
db.SaveChanges();
这带来了异常:
数据类型 xml 和 nvarchar(max) 在等于运算符中不兼容。
原因是 EF 构造 sp_executesql 的一种方式:
exec sp_executesql N'INSERT [dbo].[__Item]([documentXML], [XmlVersion])
VALUES (@0, @1)
SELECT [id]
FROM [dbo].[__Item]
WHERE @@ROWCOUNT > 0 AND [id] = scope_identity() AND [documentXML] = @0 AND [XmlVersion] = @1',N'@0 varchar(max) ,@1 tinyint',@0='<root/>',@1=3
EF 强制参数 @0 为 varchar(max) 而不是 XML 类型。
如何正确定义表示具有 XML 列的表的实体以具有更新该列的能力?
IT 人
【问题讨论】:
标签: c# xml entity-framework