我正在寻找类似于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 = "" });
这个问题似乎有点出现,我还没有看到一个好的答案.我有两个没有外键的类,除了一个公共字段之外没有真正的关系,在本例中是"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
以下是针对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 …