我有一个旧的SQL数据库,它有一个链接表来存储订单行的规范。应用程序设计人员使用SQL中的图像字段将文本存储为二进制数据。我在下面嘲笑了一个例子:
public class OrderLine
{
public int ID { get; set; }
public int OrderID { get; set; }
public int LineNo { get; set; }
public string Product { get; set; }
public decimal Quantity { get; set; }
public decimal UnitPrice { get; set; }
public string Status { get; set; }
}
public class OrderLineSpecifications
{
public int ID { get; set; }
public int OrderID { get; set; }
public int OrderLineNo { get; set; }
public Image Bits { get; set; } // <--- This Line
public int Bit_Length { get; set; }
}
SQL表定义
[ID] [int] IDENTITY(1,1) NOT NULL,
[OrderID] [varchar](15) NOT NULL,
[OrderLineNo] [smallint] NOT NULL,
[Bits] [image] NULL,
[Bit_Length] [int] NOT NULL
目前我必须使用SQL
cast(cast(Bits as varbinary(max)) as varchar(max))
提取文本,然后执行反向操作将其返回到数据库。是否可以在EF中完成转换?也许在物业层面{get;设置;}?
答案 0 :(得分:0)
解决方案比我想象的要容易。我将SQL中标识为Image的内容更改为字节数组(byte []),并创建了处理BITS值的属性(Specs)。实体框架很高兴,它可以在两个方向上运作。非常容易。
public virtual byte[] BITS { get; set; }
public virtual int BITS_LENGTH { get; set; }
[NotMapped]
public virtual string Specs
{
get
{
UTF8Encoding enc = new UTF8Encoding();
string str = enc.GetString(BITS);
return str;
}
set
{
UTF8Encoding encoding = new UTF8Encoding();
BITS = encoding.GetBytes(value);
}
}