У меня есть объект Product
, который сопоставлен с таблицей Product:
[Table("Product")]
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get'; set; }
}
У меня также есть объект CombinedProduct
, который сопоставлен с CombinedProductView, обратите внимание, что этот объект предназначен только для чтения, этот представление не обновляется :
[Table("CombinedProductView")]
public class CombinedProduct : Product
{
public string Store { get; set; }
}
И это мое MyDbContext
:
[DbConfigurationType(typeof(MySqlEFConfiguration))]
public class MyDbContext: DbContext
{
public MyDbContext() : base("MyDB")
{
}
public DbSet<Product> Product { get; set; }
public DbSet<CombinedProduct> CombinedProduct { get; set; }
}
У меня есть хранилище, в котором есть метод для возврата List
из Product
с и другой способ сохранения Product
с:
Public class ProductRepository
{
public List<Product> GetProductsMoreExpensiveThan(decimal price)
{
return _context.Product.AsNoTracking().Where(p => p.Price > price).ToList();
}
public void Update(List<Product> products)
{
foreach (var p in products)
{
_context.Product.Attach(p);
_context.Entry(p).State = EntityState.Modified;
}
_context.SaveChanges();
}
}
Я хочу увеличить цену на некоторые продукты на 5 долларов, поэтому я получаю список Product
с и увеличиваю цену :
var products = _productRepository.GetProductsMoreExpensiveThan(100);
foreach(var p in products)
{
p.Price += 5;
}
_productRepository.Update(products);
Это исключение, потому что EF пытается обновить CombinedProductView
, который не обновляется. Почему Entity Framework пытается обновить производную сущность (CombinedProduct
) при обновлении базовой сущности Product
?