C# 实体框架6-无法更新xml

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

我首先使用数据库向导中的EF代码在我的项目中创建db访问

我有一个表示表的实体:

    [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按预期工作