パフォーマンスのために、この手法に従ってテーブルを分割することにしました。したがって、基本的には、バイナリ フィールドを保持するために 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