我不敢相信让某人向我展示一个简单的工作示例是如此困难。这让我相信每个人都只能像他们知道该怎么做一样说话,但实际上他们不知道。
我将帖子缩短为仅我希望示例执行的操作。也许这个帖子太长了,把人们吓跑了。
为了获得这个赏金,我正在寻找一个可以在 VS 2010 中复制并运行的工作示例。
示例需要做什么。
- 在 mssql 2008 中将版本的版本显示为我的域中的数据类型作为时间戳
- 显示 nhibernate 自动抛出“StaleObjectException”
- 向我展示这 3 个场景的工作示例
方案 1
用户 A 来到站点并编辑 Row1。用户 B 来(注意他可以看到第 1 行)并单击编辑第 1 行,用户 B 应该被拒绝编辑行,直到用户 A 完成。
方案 2
用户 A 来到站点并编辑 Row1。用户 B 30 分钟后来,点击编辑第 1 行。用户 B 应该能够编辑此行并保存。这是因为用户 A 编辑该行的时间过长,失去了编辑权限。
方案 3
用户 A 从离开中回来。他单击更新行按钮,应该会收到 StaleObjectException。
我正在使用 asp.net mvc 和流利的 nhibernate。寻找要在这些中完成的示例。
我试过的
我尝试构建自己的,但我无法让它抛出 StaleObjectException,也无法让版本号增加。我厌倦了打开 2 个单独的浏览器并加载了索引页面。两种浏览器都显示相同的版本号。
public class Default1Controller : Controller
{
//
// GET: /Default1/
public ActionResult Index()
{
var sessionFactory = CreateSessionFactory();
using (var session = sessionFactory.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
var firstRecord = session.Query<TableA>().FirstOrDefault();
transaction.Commit();
return View(firstRecord);
}
}
}
public ActionResult Save()
{
var sessionFactory = CreateSessionFactory();
using (var session = sessionFactory.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
var firstRecord = session.Query<TableA>().FirstOrDefault();
firstRecord.Name = "test2";
transaction.Commit();
return View();
}
}
}
private static ISessionFactory CreateSessionFactory()
{
return Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2008
.ConnectionString(c => c.FromConnectionStringWithKey("Test")))
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<TableA>())
// .ExposeConfiguration(BuidSchema)
.BuildSessionFactory();
}
private static void BuidSchema(NHibernate.Cfg.Configuration config)
{
new NHibernate.Tool.hbm2ddl.SchemaExport(config).Create(false, true);
}
}
public class TableA
{
public virtual Guid Id { get; set; }
public virtual string Name { get; set; }
// Not sure what data type this should be for timestamp.
// To eliminate changing to much started with int version
// but want in the end timestamp.
public virtual int Version { get; set; }
}
public class TableAMapping : ClassMap<TableA>
{
public TableAMapping()
{
Id(x => x.Id);
Map(x => x.Name);
Version(x => x.Version);
}
}