- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我已经编写了一个 WPF 应用程序,但在刷新从 SQL Server 数据库获取的数据时遇到问题。
我正在使用 StructureMap 来注入(inject)依赖项并管理 DBContext 的生命周期。这是我的 StructureMap 配置:
ObjectFactory.Container.Configure(cfg =>
{
cfg.For<IUnitOfWork>()
.LifecycleIs(new ThreadLocalStorageLifecycle())
.Use<DBContext>();
});
但是,当我从另一个应用程序实例或直接从 SQL Server 编辑记录时,之前获取记录的客户端无法自行刷新,只能显示未修改的数据。
我使用 .LifecycleIs(new ThreadLocalStorageLifecycle()) 在每个线程上设置不同的上下文来清除 EntityFramework 的缓存,但它不起作用。
这是我的服务类:
public class DraftService : IDraftService
{
IUnitOfWork _uow;
IDbSet<Models.Draft> _draft;
public DraftService(IUnitOfWork uow)
{
_uow = uow;
_draft = _uow.Set<Models.Draft>();
}
public Models.Draft GetByID(long id)
{
return _draft.Find(id);
}
}
我按如下方式使用服务:
public class Draft
{
private IUnitOfWork _uow;
private IDraftService _draftService;
public Draft(IUnitOfWork uow, IDraftService draftService)
{
_uow = uow;
_draftService = draftService;
}
public async Task<Models.Draft> GetByID(long id)
{
return await Task.Run(() => _draftService.GetByID(id));
}
}
怎么了?为什么它不刷新数据?
提前致谢。
最佳答案
编辑:片刻的清醒之后,这就是正在发生的事情。
替换:return _draft.Find(id);//如果可以,查找使用缓存。
通过 : return _draft.SingleOrDefault(x => x.id == id)//SingleOrDefault 应该每次都从数据库中获取。
我的评论不够清楚让我们看看这个:
public class DraftService : IDraftService
{
IUnitOfWork _uow; <-- if this is disposed and _draft is accessed you'll get an error.
IDbSet<Models.Draft> _draft; <-- might be cached.
public DraftService(IUnitOfWork uow)
{
_uow = uow; <--- this context is always the same
_draft = _uow.Set<Models.Draft>();
}
public Models.Draft GetByID(long id)
{
return _draft.Find(id); <---- this will always use the cached context.
}
}
如果你让它看起来像这样。你遇到的问题要少得多。
public class DraftService : IDraftService
{
Container _ctn;
public DraftService(Container ctn)
{
_ctn= ctn;
}
public Models.Draft GetByID(long id)
{
using(var uow = _ctn.Resolve<IUnitOfWork>()){ // new fresh context. don't forget the AlwaysUnique.
return uow.Set<Draft>().Find(id); // should return the newer revision.
}}
}
如果你不想传递容器:
public class DraftService : IDraftService
{
IUnitOfWorkResolver _rslv;
public DraftService(IUnitOfWorkResolver rslv)
{
_rslv= rslv;
}
public Models.Draft GetByID(long id)
{
using(var uow = rslv.GetContext()){ // new fresh context. don't forget the AlwaysUnique.
return uow.Set<Draft>().Find(id); // should return the newer revision.
}}
}
public class UnitOfWorkResolver{
public IUnitOfWork GetContext(){
return new DBContext(); //or whatever you want you could use Container.Resolve<IUnitOFWork>() instead.
}
}
我没有放置 IUnitOfWorkResolver,但你明白了......
关于c# - 刷新 EntityFramework 中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37945160/
我想做的是让 JTextPane 在 JPanel 中占用尽可能多的空间。对于我使用的 UpdateInfoPanel: public class UpdateInfoPanel extends JP
我在 JPanel 中有一个 JTextArea,我想将其与 JScrollPane 一起使用。我正在使用 GridBagLayout。当我运行它时,框架似乎为 JScrollPane 腾出了空间,但
我想在 xcode 中实现以下功能。 我有一个 View Controller 。在这个 UIViewController 中,我有一个 UITabBar。它们下面是一个 UIView。将 UITab
有谁知道Firebird 2.5有没有类似于SQL中“STUFF”函数的功能? 我有一个包含父用户记录的表,另一个表包含与父相关的子用户记录。我希望能够提取用户拥有的“ROLES”的逗号分隔字符串,而
我想使用 JSON 作为 mirth channel 的输入和输出,例如详细信息保存在数据库中或创建 HL7 消息。 简而言之,输入为 JSON 解析它并输出为任何格式。 最佳答案 var objec
通常我会使用 R 并执行 merge.by,但这个文件似乎太大了,部门中的任何一台计算机都无法处理它! (任何从事遗传学工作的人的附加信息)本质上,插补似乎删除了 snp ID 的 rs 数字,我只剩
我有一个以前可能被问过的问题,但我很难找到正确的描述。我希望有人能帮助我。 在下面的代码中,我设置了varprice,我想添加javascript变量accu_id以通过rails在我的数据库中查找记
我有一个简单的 SVG 文件,在 Firefox 中可以正常查看 - 它的一些包装文本使用 foreignObject 包含一些 HTML - 文本包装在 div 中:
所以我正在为学校编写一个 Ruby 程序,如果某个值是 1 或 3,则将 bool 值更改为 true,如果是 0 或 2,则更改为 false。由于我有 Java 背景,所以我认为这段代码应该有效:
我做了什么: 我在这些账户之间创建了 VPC 对等连接 互联网网关也连接到每个 VPC 还配置了路由表(以允许来自双方的流量) 情况1: 当这两个 VPC 在同一个账户中时,我成功测试了从另一个 La
我有一个名为 contacts 的表: user_id contact_id 10294 10295 10294 10293 10293 10294 102
我正在使用 Magento 中的新模板。为避免重复代码,我想为每个产品预览使用相同的子模板。 特别是我做了这样一个展示: $products = Mage::getModel('catalog/pro
“for”是否总是检查协议(protocol)中定义的每个函数中第一个参数的类型? 编辑(改写): 当协议(protocol)方法只有一个参数时,根据该单个参数的类型(直接或任意)找到实现。当协议(p
我想从我的 PHP 代码中调用 JavaScript 函数。我通过使用以下方法实现了这一点: echo ' drawChart($id); '; 这工作正常,但我想从我的 PHP 代码中获取数据,我使
这个问题已经有答案了: Event binding on dynamically created elements? (23 个回答) 已关闭 5 年前。 我有一个动态表单,我想在其中附加一些其他 h
我正在尝试找到一种解决方案,以在 componentDidMount 中的映射项上使用 setState。 我正在使用 GraphQL连同 Gatsby返回许多 data 项目,但要求在特定的 pat
我在 ScrollView 中有一个 View 。只要用户按住该 View ,我想每 80 毫秒调用一次方法。这是我已经实现的: final Runnable vibrate = new Runnab
我用 jni 开发了一个 android 应用程序。我在 GetStringUTFChars 的 dvmDecodeIndirectRef 中得到了一个 dvmabort。我只中止了一次。 为什么会这
当我到达我的 Activity 时,我调用 FragmentPagerAdapter 来处理我的不同选项卡。在我的一个选项卡中,我想显示一个 RecyclerView,但他从未出现过,有了断点,我看到
当我按下 Activity 中的按钮时,会弹出一个 DialogFragment。在对话框 fragment 中,有一个看起来像普通 ListView 的 RecyclerView。 我想要的行为是当
我是一名优秀的程序员,十分优秀!