ASP.NET MVC 3数据库上下文查询

时间:2013-07-09 09:55:09

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

我有我的数据库上下文:

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}}相同?

1 个答案:

答案 0 :(得分:1)

因此,经过反复试验,似乎这完全正常,并没有带来任何错误。有一点需要注意:

此导航属性:

public virtual Category Category { get;set; }
public Guid CategoryId { get;set; }

可以驻留在Product模型中有一点 gotcha ,即:

在修改或保存新的Product时,您应该设置CategoryId而不仅仅是Category,因为您将获得重复的{{1}每次编辑或保存时,如果您使用数据库中已存在的Category ...

我认为你应该只为了方便导航属性,而不是在修改实体时使用...