使用EF6存储数据时出现“不允许从数据类型nvarchar(max)到varbinary的隐式转换”错误

时间:2019-05-11 21:37:29

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

我有两个模型类-都有一个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中创建一条记录。

1 个答案:

答案 0 :(得分:0)

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

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

开始映射到

public string OwnerId { set; get; }

期望使用byte[]类型,而不是该字段的字符串。