الدورة StructureMap / NHibernate لكل طلب بما في ذلك المعاملات ثابتة
-
08-07-2019 - |
سؤال
وأنا فقط بدأت باستخدام StructureMap في بلدي تطبيقات MVC، وسار كل شيء على ما يرام، تستثني التعامل مع بلدي ITranscation
الطريق الصحيح.
ما أريد القيام به هو إنشاء ISession جديد على كل طلب. جنبا إلى جنب مع هذا أريد أن أبدأ من الصفقات.
في نهاية الطلب وسوف ارتكاب الصفقات.
وسؤالي هو، كيف يمكن أن أفعل هذا أفضل وسيلة StructureMap. لقد وجدت الكثير من الأمثلة على جوجل، ولكن أيا منها يبدأ الصفقات لمع الطلب، وأنا حقا لا أريد أن أفعل هذا في أساليبي.
ويرجع الفضل في ذلك مسبقا!
المحلول
نصائح أخرى
وانها على الارجح ليس من السهل ولكن قطتي هنا. إنشاء وحدة العمل التي يلتف أساسا الدورة والمعاملات والمخزن الذي بعيدا عن الطلب وارتكاب أو العودة عندما طلب هو أكثر.
public interface IUnitOfWork : IDisposable
{
ISession Session { get; }
void Commit();
void Rollback();
}
ويمكن تنفيذ ذلك تبدو:
public class UnitOfWork : IUnitOfWork
{
private readonly ITransaction _tx;
public ISessionFactory SessionFactory { get; set; }
public UnitOfWork()
{
SessionFactory = ObjectFactory.GetNamedInstance<ISessionFactory>(Keys.SessionFactoryName);
Session = SessionFactory.OpenSession();
_tx = Session.BeginTransaction();
}
public UnitOfWork(ISessionFactory sessionFactory)
{
SessionFactory = sessionFactory;
Session = SessionFactory.OpenSession();
_tx = Session.BeginTransaction();
}
public ISession Session { get; private set; }
public void Commit()
{
if (_tx.IsActive)
_tx.Commit();
}
public void Rollback()
{
_tx.Rollback();
}
}
ومجرد التخلص من وحدة العمل في endrequest.
لا تنتمي إلى StackOverflow