如何使用EntityFramework将字节数据转换为String

时间:2016-01-13 10:39:02

标签: sql entity-framework byte

我在.NET中有一个Web服务。有了这个ws,我可以在Base64中接收图像,我通过Entity Framework将它存储到我的数据库中。为此,我将此字符串转换为字节。使用此代码:

    static byte[] GetBytes(string str)
    {
        byte[] bytes = new byte[str.Length * sizeof(char)];
        System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
        return bytes;
    }

现在,我必须从数据库中获取此数据并从ws显示它。所以我有这个代码来检索数据并打印响应:

private IQueryable<ImmaginiSecSocDTO> getSecSocData(int? id)
{
    if (id != null)
    {
    return from u in db_data.CAMERA_SEC_SOC 
           where u.ID == id
           select new ImmaginiSecSocDTO()
           {
           image = System.Text.Encoding.UTF8.GetString(u.Image),
           image_width = u.image_width,
           image_height= u.image_height,
           type = u.type,
           rectangle = new ImmaginiSecSocDTO.Rectangle()
           {
             rects = from pi in db_data.CAMERA_SEC_SOC_Rectangles 
                where pi.ID_SecSoc  == id
                select new ImmaginiSecSocDTO.Rectangle.Rect()
                {   
                height= pi.height,
                width = pi.width,
                x = pi.x,
                y=pi.y
                }
           } 
           };
    }
    return null;
}

但是如果我尝试运行它,我会收到以下错误消息:

  

&#34; ExceptionType&#34;:&#34; System.NotSupportedException&#34;,       &#34; StackTrace&#34;:&#34;在System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.DefaultTranslator.Translate(ExpressionConverter parent,MethodCallExpression call)\ r \ n在System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.TypedTranslate中(在System.Data.Entity.Core中的System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter parent,Expression linq)\ r \ n中的ExpressionConverter parent,MethodCallExpression linq)\ r \ n。 Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq)\ r \ n

1 个答案:

答案 0 :(得分:1)

我对通过SQL Server或实体框架处理byte []数据的任何人表示同情。

幸运的是,这个问题使用了与this answer相同的GetBytes代码,我之所以认识到它是我几年前自己使用它的原因,而且效果很好。

当然有一些关于代码最初编码的机器的一些开放性问题,但是通过事物的声音,这不应该影响你。如果是,那么我建议您尝试使用MemoryStream类,并使用StreamReader进行读取。这将更好地解释空行结尾。