我正在使用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字段?
答案 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");
}
请注意,两个实体都映射到“产品”表。