小编ner*_*aga的帖子

ASP.Net MVC对嵌套资源的支持?

我正在寻找类似于Rails提供的嵌套RESTFul路由功能的路由选项.MvcContrib上的SimplyRestful项目似乎不再是活动的,也不是1.0 MVC版本的最新版本.

这是我正在寻找的uri计划,

/ Activity/10/Task/1/Edit或/ Activity/10/Task/Edit/1

我根本无法让它工作,我遇到的所有文档都描述了非嵌套方案.它似乎并不那么困难......

这就是我一直在努力的...

    routes.MapRoute(null,
        "Activity/{activityId}/Task/{action}/{id}", 
        new { controller = "Task", action = "Edit", activityId = "", id = "" });

asp.net-mvc routes

12
推荐指数
1
解决办法
4271
查看次数

NHibernate CreateAlias - 连接任意列

这个问题似乎有点出现,我还没有看到一个好的答案.我有两个没有外键的类,除了一个公共字段之外没有真正的关系,在本例中是"Title".

这基于我最近从遗留应用程序中提取的示例,我不允许修改架构,因此只是添加外键不是一种选择.我正在寻找的是一个查询,它将为具有给定标题的课程提供所有先决条件:

 select p.* from course c join prereq p on c.title = p.title
Run Code Online (Sandbox Code Playgroud)

我不是在寻找像Join(),HasMany()等这样的映射,因为它们显然都需要一个已定义的关系.我希望基于没有映射的任意列连接两个表.

类似的问题在这里问了一段时间后似乎表明,它可能使用CreateAlias(),但我还没有找到任何很好的例子.

   <class name="Course" table="course">
      <id name="id" column="id" type="long">
        <generator class="identity" />
      </id>
      <property name="Title" column="Title" type="String" />
    </class>

    <class name="Prereq" table="prereq">
      <id name="id" column="id" type="long">
        <generator class="identity" />
      </id>
      <property name="Title" column="Title" type="String" />
      <property name="PrereqTitle" column="PrereqTitle" type="String" />
    </class>
Run Code Online (Sandbox Code Playgroud)

这就是我想出来的,但它似乎没有用.有什么建议?

        var results = session.CreateCriteria(typeof(Prereq)) 
            .CreateAlias("Course", "C")
            .CreateAlias("Prereq", "P")
            .Add( Expression.EqProperty("C.Title", "P.Title")) 
            .Add( Expression.Eq("C.Title", "Course With Prereq"))
            .List();
Run Code Online (Sandbox Code Playgroud)

这很容易与LinqToSql一起使用,可以用Liniber提供者为NHibernate完成吗?我看到的例子似乎表明提供者基本上对NH使用的任何ICriteria/ICriterion魔法进行了查询 - 它似乎不可能但如果我弄错了请纠正我.

.net nhibernate icriteria nhibernate-mapping linq-to-nhibernate

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

为什么调用Session.Clear()导致此测试失败?

以下是针对FluentNHibernate-1.1.0.685(NHibernate-2.1.2.4000)的存储库的简单测试.Session和NH配置由测试夹具提供.

[Test] public void ShouldEdit() {
    var employee = CreateEmployee();
    session.Clear();

    var changedEmployee = _testRepository(employee.id);
    changedEmployee.FirstName = "Ringo";
    _testRepository.SaveOrUpdate(changedEmployee);

    session.Flush();
    session.Clear(); // Pulling this call will allow the test to pass.

    var employees = (IList)_testRepository.GetAll();
    Assert.Contains(changedEmployee, employees);
    Assert.IsFalse(employees.Contains(employee));
}

Employee CreateEmployee() {
    var e = {Id = 1, FirstName = "George", LastName = "Washington" };
    _testRepository.SaveOrUpdate(e);
    session.Flush();
    return e;
}

如果我摆脱对Clear()的第二次调用,这个测试将通过.如果我离开了电话,那么测试将失败并显示以下内容:

Failed:
Expected: Collection containing <Employee>
But was: < <Employee> >

不是很有帮助.暂且不说,为什么我需要删除对Clear()的第二次调用?

Flush()将与db同步,如果我正确理解文档,Clear()将逐出缓存.这似乎正是我想要的行为,所以我可以肯定我没有测试陈旧的数据.事实上,如果没有调用Clear(),我会期望测试失败,但事实并非如此.有人可以对这种行为有所了解吗?

(注意:这是对PragProg书籍"Test Drive ASP.Net …

c# testing nhibernate unit-testing fluent-nhibernate

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