小编Bak*_*dan的帖子

从集合中删除项目(NHibernate)

我在两个实体(父和子)之间有父子关系.

我的父映射如下:

<class name="Parent" table="Parents">
    ...
    <bag name="Children" cascade="all">
        <key column="ParentID"></key>
        <one-to-many class="Child"></one-to-many>
    </bag>
</class>
Run Code Online (Sandbox Code Playgroud)

我想执行以下操作:

someParent.Children.Remove(someChild);
Run Code Online (Sandbox Code Playgroud)

Child类具有对另一个父类Type的引用.这种关系看起来像

关系图

注意:我为上面的非链接url道歉,我似乎无法使用Markup通过url字符串中的星号

由于这种关系,当调用上面的代码而不是DELETE查询时,会生成一个UPDATE查询,该查询从Child表中删除ParentID(设置为null).

当从Parent.Children集合中删除时,是否可以强制NHibernate完全删除子记录?

UPDATE

@ Spencer的解决方案

非常有吸引力的解决方案,因为这可以在未来的课程中实现.但是,由于在存储库模式中处理会话的方式(在我的特定情况下),这几乎是不可能的,因为我们必须根据应用程序传递会话类型(CallSessionContext/WebSessionContext).

@ Jamie的解决方案

简单快速地实施,但是我遇到了另一个障碍.我的子实体看起来如下: 实体对象

使用新方法时,NHibernate生成一个更新语句,将TypeID和ParentID设置为null,而不是单个删除.如果我错过了实现中的某些内容,请告诉我,因为这种方法可以轻松推进.

@ 此处描述的One-Shot-Delete解决方案概述了取消引用该集合以强制单个删除的想法.与上述结果相同,但发布了更新声明.

//Instantiate new collection and add persisted items
List<Child> children = new List<Child>();
children.AddRange(parent.Children);

//Find and remove requested items from new collection
var childrenToRemove = children
    .Where(c => c.Type.TypeID == 1)
    .ToList();

foreach (var c in childrenToRemove) { children.Remove(m); }
parent.Children = null;

//Set persisted collection to new list …
Run Code Online (Sandbox Code Playgroud)

c# nhibernate

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

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

如何在元素后追加空格

我想知道如何在JavaScript中的元素后追加空格?我在for循环中创建一个图像和一个span,我想在图像之后和span之后添加一个空格.以下是我创建标签的方法:

var image = document.createElement("img");
Run Code Online (Sandbox Code Playgroud)

html javascript

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

如何使用JavaScript在页面加载时(即不在按键上)检测Caps Lock状态?

因此,我一直在研究使用JavaScript / jQuery的表单大写锁定检测解决方案。stackoverflow上有一条巨大的线程可提供许多解决方案。但是唯一的问题是他们不检查是否直接按下了Caps Lock。它们检测是否输入了大写字母,并且没有按下Shift键。这样做的缺点是,在用户开始输入表单之前,我的Caps Lock警告消息不会打开/关闭,这几乎不是最佳选择。这是我的代码。

document.onkeypress = function(e){
    e = e || window.event;
    var s = String.fromCharCode(e.keyCode || e.which);
    if (s.toUpperCase() === s && !e shiftKey) {
        capsWarning.style.visibility = 'visible';
    } else {
        capsWarning.style.visibility = 'hidden';
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法,当我按下Caps Lock键时,可以使用JavaScript触发Caps Lock消息?就是说,在我开始输入文字之前,不要延迟切换消息吗?

最好是我更喜欢纯JavaScript解决方案而不是JQuery。尽管如果您认为jQuery在这里真的会非常好,请说为什么,我可以向我的同事施加压力,让我在这里包括它; o

javascript forms capslock

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

在Linq表达式中使用可空类型

var quantSubset =
    from userAns in userAnalysis.AllUserAnswers
    join ques in userAnalysis.AllSeenQuestions on userAns.QID equals ques.QID
    where (ques.QuestionType == "QT")
    select new {
        QuestionLevel = ques.LevelID,
        TimeTaken = userAns.TimeTaken,
        Points = userAns.Points,
        UsedWeapon = (userAns.UsedBy2 && userAns.UsedHint),
        WasCorrect = userAns.WasCorrect.HasValue ? userAns.WasCorrect.Value : null
    };
Run Code Online (Sandbox Code Playgroud)

在我的select表达式中,我想选择一个可以为空的类型WasCorrect(表达式的最后一部分),但显然我不能按照我目前的方式去做.

如何将WasCorrect作为可空类型

我试过?WasCorrect但是在Visual Studio中也没有给出错误.

c# linq nullable

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

如何将字符串循环为键值对

我想循环一个字符串作为键/值对.数据以字符串形式给出(我使用的是jstorage插件).

我试图将字符串拆分为数组,但它没有返回正确的键/值.

 "color":"#000000", "font":"12px", "background":"#ffffff",
Run Code Online (Sandbox Code Playgroud)

javascript arrays string loops for-loop

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

如何捕获Print Screen键?

我按下Print Screen键时需要捕获的程序,但它不能正常工作(但是它可以与其他键一起使用).

我想这与windows劫持我的权威有关,因为我还是新手,我很想知道如何解决这个问题.

这是我目前的代码:

namespace Boom_Screenshot_
{
    /// <summary>
    /// Interaction logic for Window1.xaml
    /// </summary>
    public partial class Window1 : Window
    {
        //SETTINGS
        Key TRIGGER_KEY = Key.PrintScreen;

        public Window1()
        {
            InitializeComponent();
        }

        private void Window_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == TRIGGER_KEY)
            {
                MessageBox.Show("'PrintScreen' was pressed.");
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

c# events keydown visual-studio-2008 visual-studio

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

如何在C#项目中设置Images目录的相对路径?

我正在研究C#项目我需要使用相对路径从Images目录中获取图像.我试过了

var path = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + @"\Images\logo.png";
var logoImage = new LinkedResource(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)+@"\Images\logo.png")
Run Code Online (Sandbox Code Playgroud)

但是这些没有运气......我已经让图像在程序运行时被复制到输出目录但它没有拾取那些图像.

c# relative-path

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

在IReturn <T>中使用接口作为模板的ServiceStack

我有一个关于IReturn的问题.我发现

"接口绝对不是定义服务接口的完美有效方式".

但是,尽管如此,仍然有需要或想法这样做.如果没有关于创建抽象类的例外,有没有办法做到这一点?

c# servicestack

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

数据驱动编程/事件驱动编程

一直以来,我一直在为我的所有Windows应用程序使用事件驱动编程.即处理所选索引已更改/文本已更改等事件.但最近我一直在使用INotifyPropertyChanged接口和ObservableCollection类来处理数据更改.
从长远来看,当你所涉及的应用程序/属性增长时,你是否看到了我可能面临的任何问题?

.net c#

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