我有我的数据库上下文:
public class ProductContext : DbContext
{
public ProductContext() : base ("DefaultConnection") {}
public DbSet<Product> Products {get;set;}
}
和我的存储库:
public class ProductRepository : IProductRepository
{
private ProductContext _dbContext = new ProductContext();
public IQueryable<Product> Products { get { return _dbContext.Products; } }
}
当我在Edit
Action
:
public ActionResult Edit(Guid id)
{
var item = _repository.Products.FirstOrDefault(x => x.Id.Equals(id));
return View(item);
}
我通常会使用ViewModel
,但这纯粹是为了展示场景。
当我使用var item
行查询数据库时,EntityFramework
是否会更改item
的状态。
我可以通过item
中的多个Services
传递Service Layer
,然后最后使用我的方法保存它:
public void SaveEntity<TEntity>(TEntity entityToSave) where TEntity : DbEntity
{
if (entityToSave.Id.Equals(Guid.Empty))
_dbContext.Set<TEntity>().Add(entityToSave);
else
_dbContext.Entry<TEntity>(entityToSave).State = EntityState.Modified;
_dbContext.SaveChanges();
}
它不会抛出一个例外,说明Entity
已经与您要保存的Id
{{1}}相同?
答案 0 :(得分:1)
因此,经过反复试验,似乎这完全正常,并没有带来任何错误。有一点需要注意:
此导航属性:
public virtual Category Category { get;set; }
public Guid CategoryId { get;set; }
可以驻留在Product
模型中有一点 gotcha ,即:
在修改或保存新的Product
时,您应该仅设置CategoryId
而不仅仅是Category
,因为您将获得重复的{{1}每次编辑或保存时,如果您使用数据库中已存在的Category
...
我认为你应该只为了方便导航属性,而不是在修改实体时使用...