c# - Entity Framework 在表拆分中保存一对一关系

标签 c# .net asp.net-mvc entity-framework asp.net-mvc-4

为了性能,我决定在this technique之后拆分一个表. 所以基本上我有第二个实体来保存二进制字段。 这些是我的类(class):

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

我已检查其他属性是否已正确修改。

CustomerDoc 在 SaveChanges 调用后有一个值,但没有保存在数据库中。

我还尝试在 IF 语句中更新同一客户的第二个实例,但出现了一堆错误

这是映射细节:

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

最佳答案

用以下内容替换代码中的内部 if block :

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

    var customerDoc = new CustomerDoc { CustomerID = customer.CustomerID, Document = binData };
    db.Set<CustomerDoc>().Add(customerDoc);
}

关于c# - Entity Framework 在表拆分中保存一对一关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18028233/

相关文章:

c# - 如何将位图返回给浏览器 WebApi

c# - Ranorex API 找不到 Ranorex Spy 找到的网络元素

c# - 在句子中查找字符串表达式

asp.net-mvc - ASP.net Web API 现在是 ASP.net MVC 4 的一部分吗?

C# 语法快捷方式

c# - 模型容器内的一个 View 和多个模型

c# - 使用反射将值写入 struct var 成员不起作用,但它适用于类

c# - 正则表达式 - 删除表达式内的零

asp.net - 将网站从 ASP.NET 迁移到 ASP.NET MVC

asp.net - 使用 Moq 对 View 属性进行单元测试