C# 实体框架6-无法更新xml
我首先使用数据库向导中的EF代码在我的项目中创建db访问 我有一个表示表的实体:C# 实体框架6-无法更新xml,c#,xml,entity-framework,C#,Xml,Entity Framework,我首先使用数据库向导中的EF代码在我的项目中创建db访问 我有一个表示表的实体: [Table("__Item")] public partial class Item { [Column(Order = 0)] [DatabaseGenerated(DatabaseGeneratedOption.Identity), Key()] public int id { get; set; } [Key] [Column(Order = 1, Type
[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();
var db=newmodel();
db.Item.Add(
新项目()
{
documentXML=“”,
XmlVersion=3
});
db.SaveChanges();
这带来了一个例外:
数据类型xml和nvarchar(max)在等于运算符中不兼容。
原因是sp_executesql是由EF构造的:
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
exec sp_executesql N'INSERT[dbo].[uu项]([documentXML],[XmlVersion])
值(@0,@1)
选择[id]
来自[dbo]。[项目]
其中@ROWCOUNT>0和[id]=scope_identity()和[documentXML]=@0和[XmlVersion]=@1',N'@0 varchar(max),@1 tinyint',@0='',@1=3
EF强制param@0为varchar(max)而不是XML类型
如何正确定义表示具有XML列的表的实体,以便能够更新该列?
IT人员我费了一番周折,但我已经弄明白了: 最初我的表没有标识列。当我生成实体时,一些列被标记为“[Key]”,并用于数据比较,以便实体框架可以在插入操作期间解析正确的“id” 当我从documentXML和XmlVersion中添加了identity列并删除了[Key]属性时,SaveChanges按预期工作