【发布时间】:2014-12-23 15:54:26
【问题描述】:
这是一个具体的问题,但我不知道如何让所有部分正确地结合在一起。我正在尝试使用 SQL Server 数据库启动一个项目,该数据库使用 Entity Framework 为带有 AngularJS 前端的 BreezeJS 提取数据。我的问题特别关注 N-Tier 和 BreezeJS 关系,以及如何使用 Entity Framework 设置实体才能使其正常工作。
我的项目从后端到前端是这样的:
DAL(数据访问层)
业务规则层
Web API 层
AngularJS 前端
这些层中的每一层都在不同的项目中,我希望将它们分开,尤其是 Web API 和前端,以便将来可以在不暴露业务逻辑的情况下分发 API。
理想情况下 DAL 层或多或少是我的数据库 E.X 的实体版本。
数据访问层
public class BUILDING
{
public BUILDING()
{ // A List of building visitors
this.VISITORS = new HashSet<VISITOR>();
}
[key]
public int ID { get; set; }
}
public class VISITOR
{
public VISITOR() { }
[key]
public int ID { get; set; }
// The building the visitor visited
public virtual BUILDING BUILDING { get; set; }
}
DAL 之上的层是业务规则,我希望它处理所有逻辑和数据检查以及其他任何需要的东西。这是我开始遇到问题的地方。如果我想要一个名为 ATTRACTION 的业务规则对象,它包含 DAL 对象 BUILDING 和 VISITOR,我将如何去做?
业务规则层
public class ATTRACTION // This is the object I want Breeze to track
{
private BUILDING _building;
private List<VISITOR> _visitor;
public int Id
{
get { return _building.ID }
set { _building.ID = value; }
}
public void AddVisitor(int id)
{
// Functionality
}
}
Web API 层实际上应该只是掩盖了业务规则层并且几乎没有功能,AngularJS 前端已经完成。
我真正遇到的问题是让 BreezeJS 使用 BR 层而不是 DAL 层的对象。我的数据设置是否可行?我知道(或至少相信)BreezeJS 需要 DbContext 项,但我找不到用它包装 BR 层对象的方法。归根结底,我真的只想使用 BreezeJS 来实现其更改跟踪功能。任何帮助都将不胜感激,如果需要,我可以提供更多代码示例我只是想将帖子保持在可管理的长度。
【问题讨论】:
-
您需要一个定义明确的对象图供 Breeze 使用。您可以使用 DbContext 来生成它,也可以在客户端生成它,但无论哪种方式,Breeze 都严重依赖它。如果您正在寻找的只是更改跟踪而不是对象图管理,我会考虑通过一些自定义 JS 实现更轻松的方法。
标签: entity-framework breeze n-tier-architecture