Я работаю над приложением ASP.NET MVC 4 w/EF 4.
Вот моя проблема: у меня есть объект w/byte [] properties (3 из них) для хранения файлов (varbinary (MAX)). Однако всякий раз, когда я запрашиваю объект, если эти файлы "большие" (> 1 МБ), у меня есть проблемы с таймаутом. Я могу увеличить время ожидания контекста, но лучше найти лучшее решение.
Я попытался добавить атрибут [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?
Это можно сделать, сопоставляя два объекта в таблице 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");
}
Обратите внимание, что оба объекта сопоставляются с таблицей "Продукты".