从DBContext中排除列/属性

时间:2014-08-29 21:27:14

标签: c# asp.net-mvc database entity-framework

我正在使用ASP.NET MVC 4 w / EF 4应用程序。

这是我的问题: 我有一个对象w / byte []属性(其中3个)来存储文件(varbinary(MAX))。但是,每当我查询对象时,如果这些文件是“大”(> 1MB),我就会出现超时问题。我可以增加上下文的超时,但我宁愿找到更好的解决方案。

我尝试将[NotMapped]属性添加到属性中,因为它不会在查询中包含它,但是我无法更新数据库中的值。

public class Product
{
    public int ProductID { get; set; }

    [NotMapped]    // <-- doesn't allow saving, but hides from the generated SQL
    public byte[] File1 { get; set; }
    public byte[] File2 { get; set; }
    public byte[] File3 { get; set; }

所以我的问题是: 如果可能,我该如何致电

myContext.SaveChanges();

并实际保存更改,而原始

var product = context.Products.Single(p => p.ProductID == productID);

不选择varbinary字段?

1 个答案:

答案 0 :(得分:0)

您可以通过在Product表上映射两个实体来实现此目的。

public class Product
{
    [Key]
    public int ProductID { get; set; }
    // other properties ...  

    public virtual ProductBinaryData ProductBinaryData { get; set; }
}

public class ProductBinaryData
{
    [Key]
    public int ProductID { get; set; }

    public byte[] File1 { get; set; }
    public byte[] File2 { get; set; }
    public byte[] File3 { get; set; }
}

然后在模型创建时配置表映射:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Product>()
                .HasRequired(e => e.ProductBinaryData)
                .WithRequiredPrincipal();

    modelBuilder.Entity<Product>().ToTable("Products");
    modelBuilder.Entity<ProductBinaryData>().ToTable("Products");
}

请注意,两个实体都映射到“产品”表。