相关疑难解决方法(0)

检查实体框架中是否存在实体的一般方法?

类似于检查实体框架中是否存在对象的最佳方法?

我正在寻找一种通用的方法来检查一个实体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)

c# generics entity-framework-4.1

57
推荐指数
2
解决办法
6万
查看次数

使用Automapper更新现有的实体POCO

我使用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)

两个问题:

  1. Find()方法返回一个代理而不是一个导致Automapper投诉的POCO.我如何获得POCO而不是代理?
  2. 这是执行更新的最佳做法吗?

asp.net-mvc viewmodel automapper entity-framework-4 dbcontext

17
推荐指数
1
解决办法
2万
查看次数

实体框架简单通用GetByID但具有不同的PK名称

有些正文可以帮助我创建一个通用的GetByID方法,这里的挑战是,我有很多实体,每个实体都有不同的PK名称.

我看到几个带有Generic GetByID的例子,但是其中很多都有像(id)一样的PK Name.

谢谢.

entity-framework-4

2
推荐指数
1
解决办法
4308
查看次数

通用存储库EF4 CTP5 getById

我有一个通用的存储库,我试图添加一个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

1
推荐指数
1
解决办法
4569
查看次数