我正在寻找一种通用的方法来检查一个实体DbSet.像这样的东西,这是行不通的:
private DbContext DbContext { get; set; }
private DbSet<T> DbSet { get; set; }
public Boolean Exists(T entity) {
return ((from item in this.DbSet
where item == entity
select item).Count() > 0);
}
Run Code Online (Sandbox Code Playgroud)
该行where item == entity适用于LINQ to SQL,但显然不适用于LINQ to Entities.由于实体可能具有不同的密钥,因此我们不能将它们全部继承自具有已知密钥的公共抽象以进行比较.
我可以做到这一点,但我担心将异常作为验证过程的表现这也不起作用,因为只要实体被分离,OriginalValues就无法获得属性:
public Boolean Exists(T entity) {
try {
var current = this.DbContext.Entry(entity).OriginalValues;
// Won't reach this line if the entity isn't in the database yet
return true;
}
catch …Run Code Online (Sandbox Code Playgroud) 我使用EF4 DbContext为ASP.NET MVC应用程序提供模型.我使用ViewModels为视图和Automapper提供数据,以执行EF POCO和ViewModel之间的映射.Automapper做得很好,但在将ViewModel发回控制器进行更新后,我不清楚使用它的最佳方法.
我的想法是使用ViewModel中包含的密钥获取POCO对象.然后,我想使用Automapper使用ViewModel中的数据更新POCO:
[HttpPost]
public ActionResult Edit(PatientView viewModel)
{
Patient patient = db.Patients.Find(viewModel.Id);
patient = Mapper.Map<ViewModel, Patient>(viewModel, patient);
...
db.SaveChanges();
return RedirectToAction("Index");
}
Run Code Online (Sandbox Code Playgroud)
两个问题:
asp.net-mvc viewmodel automapper entity-framework-4 dbcontext
有些正文可以帮助我创建一个通用的GetByID方法,这里的挑战是,我有很多实体,每个实体都有不同的PK名称.
我看到几个带有Generic GetByID的例子,但是其中很多都有像(id)一样的PK Name.
谢谢.
我有一个通用的存储库,我试图添加一个GetById方法,如下所示 C#LINQ to SQL:重构这个通用的GetByID方法
问题是我的存储库不使用System.Data.Linq.DataContext而是使用System.Data.Entity.DbContext
所以我在尝试使用时遇到错误
Mapping.GetMetaType
Run Code Online (Sandbox Code Playgroud)
和
return _set.Where( whereExpression).Single();
Run Code Online (Sandbox Code Playgroud)
如何在CTP5中实现通用的GetById方法?我应该在我的存储库中使用System.Data.Entity.DbContext.
这是我的存储库类的开始
public class BaseRepository<T> where T : class
{
private DbContext _context;
private readonly DbSet<T> _set;
public BaseRepository()
{
_context = new MyDBContext();
_set = _context.Set<T>();
}
Run Code Online (Sandbox Code Playgroud) generics entity-framework repository-pattern entity-framework-ctp5