C# 实体框架5:提交不会刷新内存中的实体

C# 实体框架5:提交不会刷新内存中的实体,c#,database,entity-framework-5,repository-pattern,unit-of-work,C#,Database,Entity Framework 5,Repository Pattern,Unit Of Work,我有个大问题。 我正在使用EntityFramework5和UnitOfWork模式(使用存储库)。 我有一个实体对象Person(它继承自实体,并具有一些属性:名称、姓氏、IdAddress(以及与IdAddress链接的虚拟实体地址) 当我使用以下代码时: Person p = personRepository.FindById(5); Person p = new Person(); p.IdAddress = 1; personRepository.Add(p); unitOfWork

我有个大问题。 我正在使用EntityFramework5和UnitOfWork模式(使用存储库)。 我有一个实体对象Person(它继承自实体,并具有一些属性:名称、姓氏、IdAddress(以及与IdAddress链接的虚拟实体地址)

当我使用以下代码时:

Person p = personRepository.FindById(5);
Person p = new Person();
p.IdAddress = 1;
personRepository.Add(p);
unitOfWork.commit();
我正确地获取了实体,外部实体正常,并且声明为虚拟的实体也被加载

但是,当我使用以下代码时:

Person p = personRepository.FindById(5);
Person p = new Person();
p.IdAddress = 1;
personRepository.Add(p);
unitOfWork.commit();
实体p的地址实体值为空。 在执行提交后,如何“强制”刷新内存中的实体?
非常感谢您的帮助

使用
ObjectContext
Refresh
方法:

context.Refresh(RefreshMode.StoreWins, p);
context.Entry<Person>(p).Reload();
或者如果您使用的是
DbContext

context.Refresh(RefreshMode.StoreWins, p);
context.Entry<Person>(p).Reload();
context.Entry(p.Reload();

使用
对象上下文的
刷新
方法:

context.Refresh(RefreshMode.StoreWins, p);
context.Entry<Person>(p).Reload();
或者如果您使用的是
DbContext

context.Refresh(RefreshMode.StoreWins, p);
context.Entry<Person>(p).Reload();
context.Entry(p.Reload();

使用
对象上下文的
刷新
方法:

context.Refresh(RefreshMode.StoreWins, p);
context.Entry<Person>(p).Reload();
或者如果您使用的是
DbContext

context.Refresh(RefreshMode.StoreWins, p);
context.Entry<Person>(p).Reload();
context.Entry(p.Reload();

使用
对象上下文的
刷新
方法:

context.Refresh(RefreshMode.StoreWins, p);
context.Entry<Person>(p).Reload();
或者如果您使用的是
DbContext

context.Refresh(RefreshMode.StoreWins, p);
context.Entry<Person>(p).Reload();
context.Entry(p.Reload();

对我有效的方法是在页面加载之前重新实例化存储库。您的代码会有所不同,但无论您如何从实体框架上下文在
personRepository
对象中生成数据,您都需要在每次将模型发送到视图之前执行此操作

    public ActionResult Form(int id)
    {
        _repository = new EntityFrameworkRepository<Model>(new EntityContext(), "Id");
        return View(_repository.Where(c => c.Id == id).FirstOrDefault() == null ? new Model() : _repository.Where(c => c.Id == id).FirstOrDefault());
    }
public ActionResult表单(int-id)
{
_repository=新EntityFrameworkRepository(新EntityContext(),“Id”);
返回视图(_repository.Where(c=>c.Id==Id).FirstOrDefault()==null?新模型():_repository.Where(c=>c.Id==Id).FirstOrDefault());
}

对我有效的方法是在页面加载之前重新实例化存储库。您的代码会有所不同,但无论您如何从实体框架上下文在
personRepository
对象中生成数据,您都需要在每次将模型发送到视图之前执行此操作

    public ActionResult Form(int id)
    {
        _repository = new EntityFrameworkRepository<Model>(new EntityContext(), "Id");
        return View(_repository.Where(c => c.Id == id).FirstOrDefault() == null ? new Model() : _repository.Where(c => c.Id == id).FirstOrDefault());
    }
public ActionResult表单(int-id)
{
_repository=新EntityFrameworkRepository(新EntityContext(),“Id”);
返回视图(_repository.Where(c=>c.Id==Id).FirstOrDefault()==null?新模型():_repository.Where(c=>c.Id==Id).FirstOrDefault());
}

对我有效的方法是在页面加载之前重新实例化存储库。您的代码会有所不同,但无论您如何从实体框架上下文在
personRepository
对象中生成数据,您都需要在每次将模型发送到视图之前执行此操作

    public ActionResult Form(int id)
    {
        _repository = new EntityFrameworkRepository<Model>(new EntityContext(), "Id");
        return View(_repository.Where(c => c.Id == id).FirstOrDefault() == null ? new Model() : _repository.Where(c => c.Id == id).FirstOrDefault());
    }
public ActionResult表单(int-id)
{
_repository=新EntityFrameworkRepository(新EntityContext(),“Id”);
返回视图(_repository.Where(c=>c.Id==Id).FirstOrDefault()==null?新模型():_repository.Where(c=>c.Id==Id).FirstOrDefault());
}

对我有效的方法是在页面加载之前重新实例化存储库。您的代码会有所不同,但无论您如何从实体框架上下文在
personRepository
对象中生成数据,您都需要在每次将模型发送到视图之前执行此操作

    public ActionResult Form(int id)
    {
        _repository = new EntityFrameworkRepository<Model>(new EntityContext(), "Id");
        return View(_repository.Where(c => c.Id == id).FirstOrDefault() == null ? new Model() : _repository.Where(c => c.Id == id).FirstOrDefault());
    }
public ActionResult表单(int-id)
{
_repository=新EntityFrameworkRepository(新EntityContext(),“Id”);
返回视图(_repository.Where(c=>c.Id==Id).FirstOrDefault()==null?新模型():_repository.Where(c=>c.Id==Id).FirstOrDefault());
}

(当我在另一时刻尝试检索使用FindById持久化的实体时,地址实体被正确获取)…因此我希望在持久化行为之后进行刷新(当我在另一时刻尝试检索使用FindById持久化的实体时,地址实体被正确获取)…因此,我希望在持久化行为之后进行刷新(在另一时刻,当我尝试使用FindById检索刚刚持久化的实体时,正确获取了地址实体)…因此,我希望在持久化行为之后进行刷新(当我尝试检索时,在另一个时刻,实体只是通过使用FindById持久化的,地址实体是正确获得的)…因此,我希望在持久化行为之后进行刷新。我已经阅读了有关此方法的内容,但我有两个问题:1)我无法访问上下文:我只能查看存储库和unitOfWork对象2)您确定通过“重新加载”实体聚合,所有组成实体聚合的实体都会以级联方式刷新吗?@user2328912:1)您可以更改存储库;2) 在我尝试之前,我什么都不确定;)我已经读过关于这种方法的文章,但我有两个问题:1)我无法访问上下文:我只能看到存储库和unitOfWork对象2)你确定通过“重新加载”实体聚合,我确信组成它的所有实体都以级联方式刷新?@user2328912:1)您可以更改您的存储库;2) 在我尝试之前,我什么都不确定;)我已经读过关于这种方法的文章,但我有两个问题:1)我无法访问上下文:我只能看到存储库和unitOfWork对象2)你确定通过“重新加载”实体聚合,我确信组成它的所有实体都以级联方式刷新?@user2328912:1)您可以更改您的存储库;2) 在我尝试之前,我什么都不确定;)我已经读过关于这种方法的书,但我有两个问题:1)我无法访问上下文:我只能看到存储库和unitOfWork对象2)你确定通过“重新加载”实体聚合,我可以确定组成它的所有实体都被重新加载了吗