我有一个服务对象负责一些业务逻辑验证.在对Update进行更新之前,它所做的是检查它所使用的实体是否符合某些业务规则.
其中一个必须检查的规则是,与数据库中的实体相比,实体的Status属性是否未更改.因为我使用共享同一个ISession的存储库,当我尝试从数据库中获取实体时,为了得到一个用于比较的对象:
if (fromDbEntity.Status != entity.Status) throw new Exception("Cannot change status...");
Run Code Online (Sandbox Code Playgroud)
我将永远从第一级缓存中的DbEntity获取- 所以我在同一个对象上工作.
有没有办法强制NHibernate/Repository从数据库中获取实体,即使它已经在会话范围内?
我正在阅读编程实体框架,第2版,在第一章中有一个非常简单的查询:
private static void QueryContacts()
{
using (var context = new SampleEntities())
{
var contacts = context.Contacts.Where(c => c.FirstName == "Robert");
var res = (contacts as ObjectQuery<Contact>).Execute(MergeOption.NoTracking);
foreach (var contact in res)
{
foreach (var address in contact.Addresses)
{
Console.WriteLine("\t{0}", address.City);
}
}
}
Console.Write("Press Enter...");
Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)
当我将SQL事件探查器附加到数据库实例时,我可以看到执行了以下SQL:
SELECT
[Extent1].[ContactID] AS [ContactID],
[Extent1].[FirstName] AS [FirstName],
[Extent1].[LastName] AS [LastName],
[Extent1].[Title] AS [Title],
[Extent1].[AddDate] AS [AddDate],
[Extent1].[ModifiedDate] AS [ModifiedDate]
FROM [dbo].[Contact] AS [Extent1]
WHERE N'Robert' = [Extent1].[FirstName]
Run Code Online (Sandbox Code Playgroud)
但是没有查询地址表的迹象(即使有地址).
当我附加Entity …
我正在调用存储过程:
ObjectResult<ComplexType1> result = context.ListSomething(model.SelectedDatabase);
ViewBag.WebGrid = new WebGrid(source: result, rowsPerPage: int.MaxValue, canSort: false, canPage: false);
Run Code Online (Sandbox Code Playgroud)
但是,当将结果作为源传递给WebGrid时,我收到:
System.InvalidOperationException:不能多次枚举查询结果。
我有点惊讶,因为ObjectResult实现了IEnumerable(不是IQueryable)。该异常背后的背景是什么以及为什么我必须调用ToList()方法:
var result = context.ListSomething(model.SelectedDatabase).ToList();
ViewBag.WebGrid = new WebGrid(source: result, rowsPerPage: int.MaxValue, canSort: false, canPage: false);
Run Code Online (Sandbox Code Playgroud)
让它发挥作用?您能否为我提供一些解释它的文档(例如,来自《编程实体框架,第二版》,正如我现在正在阅读的那样,但到目前为止我不记得任何可以解释该机制的内容)。
谢谢,帕维尔
有没有办法使用VSTO访问PowerPoint演示文稿中当前活动的幻灯片?如果我能获得当前活跃的Shape,也会很好.我知道如何遍历幻灯片/形状,但我找不到任何属性来确定幻灯片/形状是否处于活动状态:
foreach (Slide slide in presentation.Slides)
{
foreach (Shape shape in slide.Shapes)
{
}
}
Run Code Online (Sandbox Code Playgroud) 假设我有和数据库表名为People,以及实体People.假设我需要一种快速方法来删除应用程序中随处可见的人员子集.所以我将IsDeleted列添加到People表,并将该列中的值设置为1.
在Entity Framework中,有一种机制可以指定,对于在IsDeleted列中具有值的实体的实例,不应该获取设置为1,并且映射框架会自动过滤数据.用NHibernate可以实现吗?
我在几页上有以下代码,我还需要更多代码:
$('.editable-textbox').live('keypress', function(e) {
if (e.keyCode == 13) {
$(this).blur();
return false;
}
return true;
}).live('keyup', function(e) {
if (e.keyCode == 13) {
$(this).blur();
return false;
}
return true;
});
Run Code Online (Sandbox Code Playgroud)
它有一些缺点:
.editable-textbox类+控制模糊我只是想知道:有没有办法重构它有这样的东西:
$('.editable-textbox').supressFormSubmitOnEnter();
Run Code Online (Sandbox Code Playgroud)
用jQuery.
有没有办法在正文标记结束前注册脚本引用?我刚尝试过:
page.ClientScript.RegisterClientScriptInclude("jquery.widgets.js", page.ResolveClientUrl("~/js/plugins/jquery.widgets.js"));
Run Code Online (Sandbox Code Playgroud)
但它在表单元素开头的ViewState之后注册文件.
有一段时间,在撰写包装时,我正在使用:
import React from "react";
export default props => (
<div style={{ fontWeight: "bold" }}>{props.children}</div>
);
Run Code Online (Sandbox Code Playgroud)
但就在一秒钟之前,我遇到了这种很酷的技巧:
import React from "react";
export default props => <div style={{ fontWeight: "bold" }} {...props} />;
Run Code Online (Sandbox Code Playgroud)
它是如何工作的,我的意思是,它div也是一个React理解children属性的组件?
此代码也有效:
export default ({ children }) => (
<div children={children} style={{ fontWeight: "bold" }} />
);
Run Code Online (Sandbox Code Playgroud) 我在 react + redux 应用程序中使用最新的 agGrid 企业。
问题是我正在使用 agGrid 的内置编辑,这是直接修改底层数据,即从 redux 存储返回的数组。这违反了不变性原则。有没有办法使用/配置 agGrid no 来修改数据,但要:
谢谢
我在一个类(我们称之为MyClass)中发现了一些非常讨厌的代码,这些代码广泛使用了T.Add/Remove方法.同一个类也将该集合公开为具有T类型的IList的属性,因此更改类型将涉及一些重构.
此外,MyClass集合用作事件侦听器对象的容器,因此客户端代码只是订阅(将自身添加到集合)和取消订阅(从集合中删除).订单无关紧要,无论是列表的开始/中间/结尾.
为了提高性能,我想替换内部实现细节,替换List of T ....我不知道是什么.我尝试了T的LinkedList,但它没有实现T的IList.我在MSDN看了T的IList,但是没有实现IList的类列表,所以我可以比较文档.
另一件事是我试图将T的IList更改为ICollection of T,这可能是一个解决方案(因为MyClass的客户端代码使用Add/Remove方法,所以不需要重构)但有趣的事情发生了:
LinkedList<string> list = new LinkedList<string>();
list.Add("test");
Run Code Online (Sandbox Code Playgroud)
我收到错误时,此代码无法编译:
'System.Collections.Generic.LinkedList'不包含'添加'的定义,也没有扩展方法'添加'
但当我把它改为:
ICollection<string> list = new LinkedList<string>();
list.Add("test");
Run Code Online (Sandbox Code Playgroud)
然后我工作了.你能解释一下为什么第一个样本没有编译+告诉你在添加/删除项目方面最快的.NET Framework中的Tist实现是什么?
谢谢.
.net ×2
javascript ×2
linq ×2
nhibernate ×2
reactjs ×2
ag-grid ×1
asp.net ×1
c# ×1
c#-4.0 ×1
collections ×1
ecmascript-6 ×1
jquery ×1
powerpoint ×1
redux ×1
vsto ×1