我想弄清楚是否有可能附加到某个部分.这是我的结构:
_Layout.cshtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<link href="@Url.Content("~/Content/style.css")" rel="stylesheet" type="text/css" />
@RenderSection("Css", false)
<script type="text/javascript" src="@Url.Content("~/Content/scripts/head.load.min.js")"></script>
</head>
<body class="bg_g">
@RenderBody()
<script type="text/javascript">
@RenderSection("Javascript", false)
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
Logon.cshtml
@{
Layout = "~/Views/Shared/_DMZ.cshtml";
ViewBag.Title = "Logon";
}
@section Javascript += {
// JAVASCRIPT CODE;
}
<div>
Stuff
@{ Html.RenderAction("Register", "Account"); }
@{ Html.RenderAction("Register2", "Account"); }
</div>
Run Code Online (Sandbox Code Playgroud)
Register.cshtml
@{
Layout = null;
}
@section Javascript += {
// More javascript code
}
<div>
Register …Run Code Online (Sandbox Code Playgroud) 我试图隐藏一个我不拥有的类的实现.我想要这样做我扩展课程并实现我自己的界面.以下是如何创建我需要的类的实例:
QueueInfo info = admin.getQueue(queueName);
Run Code Online (Sandbox Code Playgroud)
QueueInfo是我不拥有的类.要获取此对象的实例,我必须使用管理对象来获取它.我想通过一个名为IQueueInfo的接口来隐藏这个实现.IQueueInfo将只提供对QueueInfo消费者需求的访问.因此,为了获得这个QueueInfo,我想通过我自己的对象EMSQueueInfo来工作.以下是我设想的设置方法:
public class EMSQueueInfo extends QueueInfo implements IQueueInfo {
//...
}
Run Code Online (Sandbox Code Playgroud)
这允许我的消费者通过接口IQueueInfo工作,它允许底层EMSQueueInfo访问QueueInfo拥有的所有内容.我的问题在于获得QueueInfo的"实时"实例.要获得QueueInfo的常规实例,我可以说:
QueueInfo info = new QueueInfo(queueName);
Run Code Online (Sandbox Code Playgroud)
此实例不是"实时",因为它不是由管理对象创建的.所以,这样做:
public class EMSQueueInfo extends QueueInfo implements IQueueInfo {
public EMSQueueInfo(String queueName){
super(queueName);
}
}
Run Code Online (Sandbox Code Playgroud)
不会给我一个"活"的对象.我希望能做的是这样的事情:
public class EMSQueueInfo extends QueueInfo implements IQueueInfo {
public EMSQueueInfo(String queueName, Admin admin){
super = admin.getQueue(queueName);
}
}
Run Code Online (Sandbox Code Playgroud)
但这是不可能的.
我看到的唯一解决方案是从我的EMSQueueInfo类中删除扩展,只是自己包装对象,通过私有变量访问所有方法:
public class EMSQueueInfo extends QueueInfo implements IQueueInfo {
private QueueInfo _queueInfo
public EMSQueueInfo(String queueName, Admin admin){
_queueInfo = admin.getQueue(queueName);
}
public int …Run Code Online (Sandbox Code Playgroud) 鉴于此方法:
internal static IEnumerable<Entity> GetByParentImpl<Entity, TKey>(this ICanGetByParent<Entity, TKey> self, TKey parentId, string fieldName)
where Entity : class
{
RepositoryBase<Entity> rb = (RepositoryBase<Entity>)self;
rb.unitOfWork.Begin();
var entities = rb.unitOfWork.Session.QueryOver<Entity>()
.Where(e => EqualityComparer<TKey>.Default.Equals(GetId<Entity, TKey>(e, fieldName), parentId))
.List();
return entities;
}
Run Code Online (Sandbox Code Playgroud)
这个助手:
private static TKey GetId<Entity, TKey>(object obj, string fieldName) where Entity : class
{
TKey id = default(TKey);
switch(id.GetType().Name) {
case "Int32":
break;
case "Guid":
id = (TKey)TypeDescriptor.GetConverter(typeof(TKey)).ConvertFromInvariantString((string)typeof(Entity).GetField(fieldName).GetValue(obj));
break;
}
return id;
}
Run Code Online (Sandbox Code Playgroud)
我的linq语句中出现了这个异常:
无法识别的方法调用:System.Collections.Generic.EqualityComparer`1 [[System.Guid,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]]:Boolean Equals(System.Guid,System.Guid) …
我的流畅配置中出现了一些模糊错误的问题.我已经读过,设置日志记录解决方案将帮助我解决问题.我想使用NLog.我知道我需要使用Common.Logging 2.0和NHibernate.IInterfaceLogger来启动并运行它.我只是不确定如何将各个部分组合在一起.我的系统基于洋葱架构.我为NLog设置了Logging服务,我有自己的界面,但是我对于将所有这些绑定在一起的地方有点困惑.我的Fluent NHibernate配置存在于我的Data项目中.我假设我想把所有这些绑在一起.
对此的任何想法都会很棒!我有点迷路了!
我需要一些帮助来设置我的Fluent NHibernate POCO类结构.我试图让一个方法使一个对象可审计.在创建时,我希望我的创建和修改日期时间设置和更新,我希望我的修改更新.我一直在关注一些例子,但我遇到了障碍.这是我目前的设置:
IAuditable.cs
namespace ZeroBase.Domain.Entities
{
public interface IAuditable
{
DateTime Created
{
get;
}
DateTime Modified
{
get;
}
string CreatedPropertyName
{
get;
}
string ModifiedPropertyName
{
get;
}
void SetCreationDate(DateTime created);
void SetModifiedDate(DateTime modified);
}
}
Run Code Online (Sandbox Code Playgroud)
AuditableEntity.cs
namespace ZeroBase.Domain.Entities
{
public class AuditableEntity<T> : IAuditable
{
public DateTime Created { get; private set; }
public DateTime Modified { get; private set; }
void IAuditable.SetCreationDate(DateTime created)
{
this.Created = created;
}
void IAuditable.SetModifiedDate(DateTime modified)
{
this.Modified = modified; …Run Code Online (Sandbox Code Playgroud) 我怎么能转换这个:
For<ISession>().Use(ctx => {
var uow = (INHibernateUnitOfWork)ctx.GetInstance<IUnitOfWork>();
return uow.Session;
});
Run Code Online (Sandbox Code Playgroud)
对Ninject?
我能够转换这个:
For<ISessionSource>().Singleton().Use<NHibernateSessionSource>();
Run Code Online (Sandbox Code Playgroud)
至
Bind<ISessionSource>()
.To<NHibernateSessionSource>()
.InSingletonScope()
Run Code Online (Sandbox Code Playgroud)
我想我也可以转换这个:
For<IUnitOfWork>().HybridHttpOrThreadLocalScoped().Use<NHibernateUnitOfWork>();
Run Code Online (Sandbox Code Playgroud)
至
Bind<IUnitOfWork>().To<NHibernateUnitOfWork>().InThreadScope();
Run Code Online (Sandbox Code Playgroud)
我知道这些并非都是一对一的,但我可以得到一些帮助吗?
我试图将NHibernate从我的服务层分离出来.我的架构看起来像这样:
web - > services - > repositories - > nhibernate - > db
我希望能够从我的服务层和可能的我的web层产生nhibernate查询,而不知道那些层知道他们正在处理什么样的orm.目前,我在我的所有存储库中都有一个find方法IList<object[]> criteria.这允许我传递一个标准列表,例如new object() {"Username", usernameVariable};从我的架构中的任何地方.NHibernate接受它并创建一个新的Criteria对象并添加传入的标准.这适用于我的服务层的基本搜索,但我希望能够传入我的存储库转换为NHibernate Criteria的查询对象.
真的,我很乐意实现类似于这个问题所描述的内容:抽象nhibernate标准是否有价值.我只是没有找到任何关于如何实现这样的东西的好资源.该问题中描述的方法是一种好方法吗?如果是这样,有人可以提供一些关于如何实施这样的解决方案的指示吗?
我正在尝试将服务结果映射到特定的视图模型.我有一个名为Category的实体,其中包含Id和Name.我通过存储库ICategoryRepository公开它.我有一个服务IInfrastructureService使用类别存储库GetAllCategories.GetAllCategories返回一个IList.在我的MVC项目中.我有一个名为NavigationController的控制器.此控制器需要调用GetAllCategories服务.我想将此结果映射到这样的结构:
public class CategoryViewModel {
public Guid CategoryId { get; set; }
public string Name { get; set; }
}
public class CategoryMenuViewModel {
public IList<CategoryViewModel> Categories { get; set; }
public CategoryViewModel SelectedCategory { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想用Automapper来做这件事.在我的Application_Start()中,我创建了地图:
Mapper.CreateMap<Category, CategoryViewModel>();
Run Code Online (Sandbox Code Playgroud)
然后在我的控制器中:
public ViewResult CategoryMenu()
{
CategoryMenuViewModel viewModel = new CategoryMenuViewModel();
Mapper.CreateMap<Category, CategoryViewModel>();
viewModel.Categories = Mapper.Map<IList<Category>, IList<CategoryViewModel>>(_infrastructureService.GetAllCategories());
return View(viewModel);
}
Run Code Online (Sandbox Code Playgroud)
这给了我这个例外:程序集中的重复类型名称.
我不确定我在这里做错了什么.任何帮助或指导都会摇滚!
我正在尝试将一个属性注入我的一个名为UnitOfWorkAttribute的ActionFilter中.我有这个代码:
[Inject]
public IUnitOfWork UnitOfWork { get; set; }
Run Code Online (Sandbox Code Playgroud)
在执行之前,我告诉Ninject解决这个问题:
Bind<IUnitOfWork>().To<NHibernateUnitOfWork>().InThreadScope();
Run Code Online (Sandbox Code Playgroud)
我的问题是,在我的UnitOfWorkAttribute类中,每当我尝试使用我的UnitOfWork属性时,它都会显示为Null.这是我的界面:
public interface IUnitOfWork : IDisposable
{
void Begin();
void Commit();
void Rollback();
}
Run Code Online (Sandbox Code Playgroud)
这是我的具体内容:
public interface INHibernateUnitOfWork : IUnitOfWork
{
ISession Session { get; }
}
public class NHibernateUnitOfWork : INHibernateUnitOfWork
{
private readonly ISessionSource sessionSource;
private ITransaction transaction;
private ISession session;
private bool disposed;
private bool begun;
public NHibernateUnitOfWork(ISessionSource sessionSource)
{
this.sessionSource = sessionSource;
Begin();
}
//.......
}
Run Code Online (Sandbox Code Playgroud)
我正在履行//下的界面......
我在这做错了什么?
我正在尝试找出在我的架构中使用身份验证密码的最佳位置.这是我的请求流程:
MVC3->MembershipProvider->AccountService->UserRepository->NHibernate->Database
Run Code Online (Sandbox Code Playgroud)
我在服务级别的哈希与存储库级别之间徘徊.我看到两者都有优势,但有谁知道这个标准的地方照顾这个?我将哈希密码存储在数据库中.
passwords domain-driven-design onion-architecture asp.net-mvc-3
我想我的工作单元可能会在我的架构中设置错误.这是我目前拥有的(缩进显示顺序):
HttpRequest.Begin()
UnitOfWork.Begin()
Session.BeginTransaction(System.Data.IsolationLevel.ReadCommitted);
Run Code Online (Sandbox Code Playgroud)
在这里,我使用NHibernate调用各种服务来执行crud.当我想对数据库进行更改(更新/保存)时,我调用此代码:
using (var transaction = unitOfWork.Session.BeginTransaction())
{
try
{
// These are just generics
ret = (Key)unitOfWork.Session.Save(entity);
transaction.Commit();
rb.unitOfWork.Session.Clear();
}
catch
{
transaction.Rollback();
rb.unitOfWork.Session.Clear();
rb.unitOfWork.DiscardSession();
throw;
}
}
Run Code Online (Sandbox Code Playgroud)
当HttpRequest结束时,我执行以下步骤:
UnitOfWork.Commit()
Transaction.Commit() // This is my sessions transaction from the begin above
Run Code Online (Sandbox Code Playgroud)
我遇到了能够回滚大批量进程的问题.因为我在我的CRUD层中提交我的事务,如上所示,我的事务不再处于活动状态,当我尝试在UnitOfWork中回滚时,由于事务已经提交,它什么都不做.我在我的CRUD层中提交代码的原因是我可以尽可能快地保留我的数据,而不会长时间锁定数据库.
在上述情况下采取的最佳行动方案是什么?我是否只进行了不提交批处理作业的特殊CRUD操作,只是在我的工作结束时处理提交,或者我的逻辑是否与我的UnitOfWork和Session Per Request有关?有什么建议?
c# ×7
nhibernate ×4
ninject ×2
asp.net-mvc ×1
automapper ×1
java ×1
nlog ×1
oop ×1
passwords ×1
structuremap ×1
unit-of-work ×1