我有C#应用程序的SOA层架构。我在业务访问层'类库项目'中定义了业务/域实体....数据访问层'类库项目'中的数据实体和服务器端WCF的数据合同在WCF服务'类库项目'下
RTRIM
namespace App.Core.Entities
{
public class Member
{
public int MemberID { get; set; }
public string Title { get; set; }
public string Surname { get; set; }
public string Forename { get; set; }
public string MiddleName { get; set; }
}
}
namespace App.DAL.Entities
{
[Table("Member")]
public class Member
{
[Key]
public int MemberID { get; set; }
public string Title { get; set; }
public string Surname { get; set; }
public string Forename { get; set; }
public string MiddleName { get; set; }
}
namespace App.Services.Contracts
{
[DataContract]
public class MemberData : IIdentifiableEntity
{
[DataMember]
public int MemberID { get; set; }
[DataMember]
public string Title { get; set; }
[DataMember]
public string Surname { get; set; }
[DataMember]
public string Forename { get; set; }
[DataMember]
public string MiddleName { get; set; }
int IIdentifiableEntity.EntityId
{
get { return MemberID; }
set { MemberID = value; }
}
}
}
public interface IGenericRepository<TEntity> where TEntity :class
{
global::System.Linq.IQueryable<TEntity> GetAll();
TEntity GetEntityByID(int id);
void InsertEntity(TEntity obj);
void UpdateEntity(TEntity obj);
void DeleteEntity(int id);
}
现在我的问题是当我从业务项目运行代码时,它应该只与存储库通信并仅使用业务实体作为成员但它要求我在业务项目中添加来自DAL的引用
这是我得到错误的代码
namespace App.Repository.UnitOfWork
{
public class MembershipManagement_UOF:IDisposable
{
protected Member_Repository _Member_Repository;
public Member_Repository Member_Repository
{
get
{
if (this._Member_Repository == null)
{
this._Member_Repository = new Member_Repository(_MembershipContext);
}
return _Member_Repository;
}
}
}
public IEnumerable<Member> GetAllMember()
{
using (var _uof = new MembershipManagement_UOF())
{
var entities = _uof.Member_Repository.GetAll();
// return entities.ToList();
return null;
}
}
答案 0 :(得分:1)
从原始帖子中说出来有点困难,但我怀疑你IGenericRepository
接口的具体实现是从DAL而不是BLL(业务逻辑层)引用Member
类。 )。具体的存储库需要使用BLL中的Member
类作为其通用TEntity
类型。具体的存储库类的方法需要使用DAL Member
类从数据库加载数据,然后将这些DAL Member
实例映射到BLL Member
实例,然后返回BLL Member
个实例。
将DAL成员类重命名为MemberDto之类的内容可能有助于避免混淆。因此,您最终可能会得到类似的内容(您的BLL中IGenericRepository<TEntity>
,而DAL中的MyMemberRepo
):
public class MyMemberRepo : IGenericRepository<Member>
{
public IEnumerable<Member> GetAllMember()
{
// 1. Load the data from the data store into an IEnumerable<MemberDto>.
// 2. Map the IEnumerable<MemberDto> to an IEnumerable<Member>, perhaps
// using something like the open source AutoMapper project.
// 3. Return the IEnumerable<Member>.
}
// ... other interface implementations...
}