Entity Framework为数据库中的varbinary类型返回不同的值

问题描述 投票:0回答:1

[我是C#EF的新手,如果我对某些术语有误,我深表歉意,因为我正在修复写有Web APIs的开发人员的代码,但该代码不可用。

总而言之,我们有一个JAVA前端,该前端上传PDF文件并将它们作为SQL Server存储在我们的varbinary(max)数据库中。当JAVA Web应用程序下载PDF时,它将调用数据库函数,该函数将varbinary数据返回到byte[]变量中,然后JAVA Web App能够对其进行文件流传输并另存为PDF ]没问题。

[文件数据的数据库值,以及返回varbinary(max)列的函数返回的值,以及在byte[]中使用的JAVA中存储的内容,然后将其转换为字符串,都一样,看起来像:

"0x255044462D312E360D25E2E3CFD30D0A34372030206F626A0D3C3C2F414442455F46696C6C5369676E496E666F3C3C2F56657273696F6E203130302F666F726D4..."

据我所知,这是varbinary数据的格式。

在使用Web APIEF中,相同的功能在EF模型中建模,并显示为Complex Type,并且Filedata列的类型为Binary,根据MS docs ]这是正确的:

([https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql-server-data-type-mappings?redirectedfrom=MSDN

在C#模型中,Filedata定义为:

public byte[] FileData { get; set; }

有一个Controller,它从函数中返回数据,如下所示:

[HttpGet]
public IHttpActionResult FileAttachment_Get(string FileAttachmentID)
{
   using (TSTDBContext dbContext = new TSTDBContext())
   {
       Guid FileAttachmentGUID = new Guid(FileAttachmentID);
       var entity = dbContext.FileAttachment_Get(FileAttachmentGUID).SingleOrDefault();
       if (entity != null)
       {
            /*var str = System.Text.Encoding.Default.GetString(entity.FileData);*/
            return Ok(new { results = entity });
       }
       else
       {
           return NotFound();
       }
   }
}

实体变量包含Filedata值,然后我们可以在Web API中返回该值,供移动应用使用以显示PDFs。返回的值与数据库中的值不同,如下所示:

"JVBERi0xLjYNJeLjz9MNCjQ3IDAgb2JqDTw8L0FEQkVfRmlsbFNpZ25JbmZvPDwvVmVyc2lvbiAxMDAvZm9ybUlEKDY0OTFiNDYzLTA2MGEtNGU1Yy05NmYyLTljMThkMTZlNDlhZik+Pi9NZXRhZGF0YSA1NSAwIFIvT0NQcm9wZXJ0aWVzPDwvRDw8L09OWzU2IDAgUl0vT3JkZXJbXS9SQkdyb3Vwc1tdPj4vT0NHc1s1NiAwI..."

[当我们将其用于PDF文件时,PDF文件已损坏。该函数还返回了其他数据,并且该数据是正确的,但是没有一个数据为varbinary类型。 varbinary数据是我们遇到的唯一字段,并且返回的字段与数据库中存储的字段不同。

上面注释的代码将其转换为字符串,还会显示不同的数据。

我的问题是,为什么EF将不同的数据返回到varbinary(max) column的数据库中?

我希望我已经解释清楚了,但是如果您需要更多详细信息,请告诉我。

谢谢。

c# arrays sql-server entity-framework varbinarymax
1个回答
0
投票

MVC Controller响应可能是base64编码的,因此在创建PDF之前,您需要在客户端中使用base64解码。

© www.soinside.com 2019 - 2024. All rights reserved.