我一直在试图解决这个问题,但是在ASP.NET MVC上这个特定主题的信息似乎很少.我一直在谷歌搜索几天,并没有真正能够解决这个特定的问题.
我有一个3层项目.业务,DAL和UI/Web层.在DAL中是dbcontext,存储库和工作单元.在业务层中是包含所有接口和EF模型的域层.在业务层中,还有一个服务层,其中包含用于EF模型的DTO和用于访问存储库的通用存储库服务.这张照片应该有助于解释它.
我的问题是,我似乎无法弄清楚如何使用DTO从业务层传输数据.
我已经为DTO创建了服务类.我有一个ImageDTO和模型和图像锚点相同.我为每个DTO创建了一个服务类.所以我有一个图像服务和主播服务.这些服务继承存储库服务,并且目前实现自己的服务.但就我而言,那就是那个.由于这些服务具有通过IoC接收IUnitOfWork接口的构造函数,因此我几乎陷入困境.
如果我直接从UI引用服务,一切正常,但我无法理解如何使用DTO将数据从服务层传输到UI层,反之亦然.
我的服务层:
业务/服务/ DTO的
public class AnchorDto
{
public int Id { get; set; }
public int x1 { get; set; }
public int y1 { get; set; }
public int x2 { get; set; }
public int y2 { get; set; }
public string description { get; set; }
public int imageId { get; set; }
public int targetImageId { get; set; }
public AnchorDto(int Id, int x1, int y1, int x2, …Run Code Online (Sandbox Code Playgroud) 没有交易,我不敢在数据库中做任何复杂的事情.几乎总是有一个简单易用的内置命令.但是当你开始使用其他持久性数据时,你就不会那么简单地使用事务支持.一些例子是
即使在非持久性数据中,在异常之后撤消工作块通常也很有用.您使用语言获得的标准数据结构都不支持事务.
我想知道的是,为什么数据库是特例?
是否有任何有用的链接指向数据库外的事务行为主题?
通过支持(C)Python和Java/JMS应用程序的消息代理进行通信的好方法是什么?我的特殊要求是:
我很难找到解决方案.Apache的ActiveMQ没有开箱即用的Python支持.ZeroMQ需要一个集合点.RabbitMQ似乎不支持JMS.我找到的最佳候选者是ActiveMQ和pyactivemq库的组合.但是pyactivemq的第一个也是最后一个版本是在2008年,所以看起来这不符合我的"无边缘"要求.
理想的答案是一个或多个支持良好且记录良好的开源软件包的名称,您个人习惯于在Java/JMS和Python应用程序之间进行通信,并且不需要进行大量的集成工作开始.答案包括"简单"(最多几天的工作)实施额外的胶水代码以满足上述所有要求,这是可以接受的.在没有良好的开源候选人的情况下,商业解决方案也是可以接受的.
此外,Jython已经出局了.(如果我能......)相同的Python应用程序将需要使用仅在CPython中可用的模块.
我正在尝试在Simple.Data中找到工作单元模式的示例实现.有人有吗?我目前正在使用非通用存储库,并且被告知实现UoW是可以做的事情.
我的基本设置很像这样; http://visualstudiomagazine.com/articles/2011/10/01/wpf-and-inversion-of-control.aspx
WPF中的MVVM设置.我正在将ViewOfWork和RepositoryFactory注入ViewModel.这对我到目前为止编写的对话框非常有用......但是我们的应用程序的大部分都在可停靠窗口内(想想Visual Studio UI).只要应用程序是这样,它们就是开放的.
所以我的想法是将单元工作从对话的生命周期转移到方法调用的生命周期(例如Button.Click()).
但我还没有想出一个好方法,这不会破坏我使用Castle Windsor作为IoC容器和/或不遵循DRY所带来的一些好处.
这似乎很不错...... http://www.codeproject.com/Articles/543810/Dependency-Injection-and-Unit-Of-Work-using-Castle但我担心会话被包裹在一个半单身和担心我可能会通过删除对UnitOfWork的直接访问来拍摄自己.
任何人都有一个很好的解决方案吗?以上代码项目是否良好,如果不是,它的缺陷是什么?
我目前正在使用具有通用存储库和工作单元模式的实体框架.我的模型类似于本文中描述的模型
我过去曾使用Generic Repositories,并且非常享受它可以提供的全局功能.但是,在将它与Entity Framework一起使用时,似乎每天都会遇到更多问题.在处理父/子/交汇关系时,这些问题似乎更多.
使用带有EF的通用存储库开始在我的口中留下不好的味道,我开始认为使用带有EF的通用存储库是错误的方法.
有人可以帮助引导我朝正确的方向发展吗?
我正在设计一个Web应用程序和一个Windows服务,并希望将工作单元+存储库层与服务层结合使用,我在将它们放在一起时遇到一些麻烦,以便客户端应用程序控制数据的事务处理.工作单位.
工作单元具有在事务中注册的所有存储库的集合以及提交和回滚操作
public interface IUnitOfWork : IDisposable
{
IRepository<T> Repository<T>() where T : class;
void Commit();
void Rollback();
}
Run Code Online (Sandbox Code Playgroud)
通用存储库具有将在特定模型(表)的数据层上执行的操作
public interface IRepository<T> where T : class
{
IEnumerable<T> Get(Expression<Func<T, bool>> filter = null, IList<Expression<Func<T, object>>> includedProperties = null, IList<ISortCriteria<T>> sortCriterias = null);
PaginatedList<T> GetPaged(Expression<Func<T, bool>> filter = null, IList<Expression<Func<T, object>>> includedProperties = null, PagingOptions<T> pagingOptions = null);
T Find(Expression<Func<T, bool>> filter, IList<Expression<Func<T, object>>> includedProperties = null);
void Add(T t);
void Remove(T t);
void Remove(Expression<Func<T, bool>> filter);
}
Run Code Online (Sandbox Code Playgroud)
工作单元的具体实现使用引擎下的实体框架(DbContext)来保存对数据库的更改,并且每单元工作创建一个新的DbContext类实例
public …Run Code Online (Sandbox Code Playgroud) asp.net-mvc design-patterns dependency-injection unit-of-work repository-pattern
我刚才在codereview.stackexchange.com上发布了这篇评论 ...我觉得它可能更适合stackoverflow,因为它更像是一个问题,而不是代码审查.
它需要一些解释,请耐心等待.
我正在ASP.NET MVC中开发一个电子商务网站.用户可以在网站上发布不同类型的广告.
我使用继承来定义我的广告类型,这个问题是利用层次结构来删除控制器和视图中重复的代码.
我有不同的广告类型:SimpleAd,Car和RealEstateRental.
每个广告都源自AdBase,其具有所有常见属性:
public abstract class AdBase
{
public long AdBaseId { get; set; }
public bool IsActive { get; set; }
public long UserId { get; set; }
public string Title { get; set; }
public short AdDurationInDays { get; set; }
public string PhotosFolder { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在,其他广告来自此基类:
public class SimpleAd : AdBase
{
public decimal Price { get; set; }
} …Run Code Online (Sandbox Code Playgroud) 我使用NHibernate设置了存储库模式.基类如下所示:
public interface IUnitOfWork : IDisposable
{
void Commit();
void Rollback();
}
// generic NHibernate implementation of IUnitOfWork here
public class NHibernateRepositoryBase<T> : IRepository<T>
{
private NHibernateUnitOfWork _unitOfWork;
public NHibernateRepositoryBase(NHibernateUnitOfWork unitOfWork)
{
_unitOfWork = unitOfWork;
}
public T Get(object id)
{
return _unitOfWork.Session.Get<T>(id);
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我允许通过构造函数(使用StructureMap)填充工作单元.我正在填充ASP.NET Web服务上的存储库对象,如下所示:
[WebService(Namespace = "...")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class ModuleService : System.Web.Services.WebService
{
public IUserAccountRepository UserAccountRepo { get; set; }
public ModuleService()
{
// tell IoC to inject properties
ObjectFactory.BuildUp(this);
}
// …Run Code Online (Sandbox Code Playgroud) 我首先使用Entity Framework代码创建MVC Web应用程序项目.在这个项目中,我将使用通用存储库和工作单元模式.另外,我想使用存储过程来获取list by和get-list方法.
如何将存储过程与通用存储库和工作单元模式一起使用?
entity-framework unit-of-work repository-pattern entity-framework-4 ef-code-first
unit-of-work ×10
asp.net-mvc ×3
c# ×3
repository ×2
.net ×1
database ×1
dto ×1
generics ×1
inheritance ×1
java ×1
middleware ×1
mvvm ×1
oop ×1
persistence ×1
python ×1
simple.data ×1
transactions ×1
wpf ×1