【问题标题】:Entity Framework 6 - unable to update xml实体框架 6 - 无法更新 xml
【发布时间】: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


    【解决方案1】:

    好吧,我花了一些时间,但我已经弄清楚了:

    最初我的表没有标识列。当我生成实体时,一些列被标记为“[Key]”并用于数据比较,以便实体框架可以在 INSERT 操作期间解析正确的“id”。

    当我从 documentXML 和 XmlVersion 添加标识列并删除 [Key] 属性时,SaveChanges 按预期工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多