小编dra*_*fly的帖子

强制NHibernate获取已经处于持久状态/第一级缓存的实体

我有一个服务对象负责一些业务逻辑验证.在对Update进行更新之前,它所做的是检查它所使用的实体是否符合某些业务规则.

其中一个必须检查的规则是,与数据库中的实体相比,实体的Status属性是否未更改.因为我使用共享同一个ISession的存储库,当我尝试从数据库中获取实体时,为了得到一个用于比较的对象:

if (fromDbEntity.Status != entity.Status) throw new Exception("Cannot change status...");
Run Code Online (Sandbox Code Playgroud)

我将永远从第一级缓存中的DbEntity获取- 所以我在同一个对象上工作.

有没有办法强制NHibernate/Repository从数据库中获取实体,即使它已经在会话范围内?

nhibernate

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

SQL Server Profiler不会跟踪所有Entity Framework 4查询 - 问题

我正在阅读编程实体框架,第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 …

.net linq entity-framework sql-server-2008

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

枚举存储过程结果 - 不能多次枚举查询结果

我正在调用存储过程:

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)

让它发挥作用?您能否为我提供一些解释它的文档(例如,来自《编程实体框架,第二版》,正如我现在正在阅读的那样,但到目前为止我不记得任何可以解释该机制的内容)。

谢谢,帕维尔

linq linq-to-entities entity-framework entity-framework-4

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

访问PowerPoint中的幻灯片上的活动幻灯片/访问活动形状 - VSTO

有没有办法使用VSTO访问PowerPoint演示文稿中当前活动的幻灯片?如果我能获得当前活跃的Shape,也会很好.我知道如何遍历幻灯片/形状,但我找不到任何属性来确定幻灯片/形状是否处于活动状态:

        foreach (Slide slide in presentation.Slides)
        {
            foreach (Shape shape in slide.Shapes)
            {
            }
        }
Run Code Online (Sandbox Code Playgroud)

powerpoint vsto

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

在NHibernate中映射级别上过滤实体

假设我有和数据库表名为People,以及实体People.假设我需要一种快速方法来删除应用程序中随处可见的人员子集.所以我将IsDeleted列添加到People表,并将该列中的值设置为1.

在Entity Framework中,有一种机制可以指定,对于在IsDeleted列中具有值的实体的实例,不应该获取设置为1,并且映射框架会自动过滤数据.用NHibernate可以实现吗?

nhibernate

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

如何将JavaScript代码封装为jQuery插件或其他解决方案

我在几页上有以下代码,我还需要更多代码:

        $('.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.

javascript jquery

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

在body标记结束前注册脚本引用标记

有没有办法在正文标记结束前注册脚本引用?我刚尝试过:

page.ClientScript.RegisterClientScriptInclude("jquery.widgets.js", page.ResolveClientUrl("~/js/plugins/jquery.widgets.js"));
Run Code Online (Sandbox Code Playgroud)

但它在表单元素开头的ViewState之后注册文件.

asp.net

3
推荐指数
2
解决办法
6427
查看次数

我的React组件如何理解'儿童'属性?

有一段时间,在撰写包装时,我正在使用:

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)

javascript ecmascript-6 reactjs

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

react + redux 应用中的 agGrid 正在修改底层数据

我在 react + redux 应用程序中使用最新的 agGrid 企业。

问题是我正在使用 agGrid 的内置编辑,这是直接修改底层数据,即从 redux 存储返回的数组。这违反了不变性原则。有没有办法使用/配置 agGrid no 来修改数据,但要:

  • 对更改做出反应并调用一些带有更改信息的回调
  • 然后我可以更新 redux 存储(数组中的一项)
  • 然后 agGrid 可以检测到数组中只有一个对象发生了变化,并且它只会刷新单行

谢谢

reactjs redux ag-grid ag-grid-react

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

在添加/删除元素方面,IList <T>/ICollection <T>的最快实现

我在一个类(我们称之为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 c# collections c#-4.0

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