0

注文明細の仕様を格納するためのリンクされたテーブルを持つレガシー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; セットする;} ?

4

1 に答える 1

0

解決策は私が思っていたよりも簡単でした。SQLで画像として識別されたものをバイト配列(byte [])に変更し、BITS値を処理するプロパティ(Specs)を作成しました。Entity Frameworkは満足しており、双方向で機能します。驚くほど簡単です。

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);
     }

}
于 2012-08-17T19:43:37.843 に答える