4

パフォーマンスのために、この手法に従ってテーブルを分割することにしました。したがって、基本的には、バイナリ フィールドを保持するために 2 番目のエンティティがあります。これらは私のクラスです:

public partial class CustomerDoc
{
    public byte[] Document { get; set; }
    public int CustomerID { get; set; }

    public virtual Customer customer { get; set; }
}

public partial class Customer
{
    public int CustomerID { get; set; }
    public string Name { get; set; }

    public virtual CustomerDoc CustomerDoc { get; set; }
}

アップロードされたファイルで既存の Customer インスタンスの Document プロパティを更新しようとすると、この値はデータベースに保存されず、他のプロパティは保存されますが、Document は保存されません。

    [HttpPost]
    public virtual ActionResult Edit(Customer customer, HttpPostedFileBase file)
    {
        if (ModelState.IsValid)
        {
            //code to modify other properties 

            if (file != null && file.ContentLength > 0)
            {
                BinaryReader b = new BinaryReader(file.InputStream);
                byte[] binData = b.ReadBytes((int)file.InputStream.Length);

                customer.CustomerDoc= new CustomerDoc { CustomerID = customer.CustomerID, Document = binData };

            }

            db.Entry(customer).State = EntityState.Modified;
            db.SaveChanges();
         }

他のプロパティが正しく変更されていることを確認しました。

SaveChanges の呼び出し後に CustomerDoc に値がありますが、データベースには保存されません。

また、IFステートメント内の同じ顧客の2番目のインスタンスで更新しようとしましたが、一連のエラーが発生します

これはマッピングの詳細です:

Mapping Details - CustomerDoc
  Maps to Customer
    Column Mapping
       CustomerID : int <-> *CustomerID : Int32
       Document : varbinary(max) <-> Document: Binary 
4

2 に答える 2