【问题标题】:"Implicit conversion from data type nvarchar(max) to varbinary is not allowed" error when storing data using EF6使用 EF6 存储数据时出现“不允许从数据类型 nvarchar(max) 到 varbinary 的隐式转换”错误
【发布时间】:2019-05-11 21:37:29
【问题描述】:

我有两个模型类 - 都有一个 byte[] 字段用于存储 PDF 文件。

在数据库中,两个模型类对应于两个表 - 都具有 varbinary(max) 列。

对于一个模型类,我可以轻松地坚持到 SQL Server,但是对于另一个类 + 表,我得到了错误

不允许从数据类型 nvarchar(max) 到 varbinary 的隐式转换

这两个类和表基本相似——除了名称。

我查看了很多有关此错误的答案,但找不到任何使用 EF6 的答案。我已经手动创建了数据库表和类 - 所以不涉及自动生成。

希望有人能帮我解决这个错误。

提前致谢

尝试将列类型从 varbinary(max) 更改为 nvarchar(max)

尝试删除表并从头开始创建

//Pdf 
   [Table("SelfBillings")]
public class SelfBilling
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public long Id { get; set; }

    public string OwnerId { set; get; }

    public long BookingId { set; get; }

    public long SelfBillingNumber { set; get; }

    public DateTime Date { get; set; }

    public DateTime PeriodStart { set; get; }

    public DateTime PeriodEnd { set; get; }

    public decimal PeriodDays { get; set; }

    public decimal PeriodHours { get; set; }

    public decimal RentalAmount { get; set; }

    public decimal RentalAmountTotal { get; set; }

    public decimal VatAmount { get; set; }

    public decimal TotalAmount { get; set; }

    public decimal TotalAmountInclVat { get; set; }

    //Pdf             
    public byte[] Attachment { set; get; }        
}

//Database table
CREATE TABLE [dbo].[SelfBillings]
(
    [Id] [BIGINT] IDENTITY(1,1) NOT NULL,
    [OwnerId] [VARBINARY](128) NOT NULL,
    [BookingId] [BIGINT] NOT NULL,
    [SelfBillingNumber] [BIGINT] NOT NULL,
    [Date] [DATETIME2](7) NOT NULL,
    [PeriodStart] [DATETIME2](7) NOT NULL,
    [PeriodEnd] [DATETIME2](7) NOT NULL,
    [PeriodDays] [DECIMAL](10, 2) NOT NULL,
    [PeriodHours] [DECIMAL](10, 2) NOT NULL,
    [RentalAmount] [DECIMAL](10, 2) NOT NULL,
    [RentalAmountTotal] [DECIMAL](10, 2) NOT NULL,
    [VatAmount] [DECIMAL](10, 2) NOT NULL,
    [TotalAmount] [DECIMAL](10, 2) NOT NULL,
    [TotalAmountInclVat] [DECIMAL](10, 2) NOT NULL,
    [Attachment] [VARBINARY](MAX) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

//Mapping
modelBuilder.Entity<SelfBilling>().ToTable("SelfBillings");

我希望在表 SelfBillings 中创建一条记录。

【问题讨论】:

  • 发布这些表的 EF 映射
  • 我在 SQL Server 2017 中设置了一个新数据库,并使用您的“创建表...”DDL 来创建它工作的新表,所以那里没有问题。 “这两个类和表基本相似——除了名称。”这可能是问题的根源,因此请发布模型类的代码。
  • 原帖已更新。找不到此“SelfBilling”设置与我正在使用的类似设置之间的区别:-(

标签: c# sql-server asp.net-mvc-4 entity-framework-6


【解决方案1】:

附件是 NVARBINARY(MAX) 但我想知道它是否在抱怨:

[OwnerId] [VARBINARY](128) NOT NULL,

开始映射到

public string OwnerId { set; get; }

它需要 byte[] 类型,而不是该字段的字符串。

【讨论】:

  • 谢谢 :-) 这就是问题所在——不知道我怎么会错过。 OwnerId 应该是 varchar(128)。我的重点是代码的错误部分。再次 - 谢谢你:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-26
相关资源
最近更新 更多