簡體   English   中英

存儲庫模式和工作單元項目中的域實體和數據實體之間的c#映射

[英]c# mapping between Domain Entity and Data Entity in Repository Pattern and unit of work project

我有用於C#應用程序的SOA層體系結構。 我在業務訪問層“類庫項目”中定義了業務/域實體。...在數據訪問層“類庫項目”中的數據實體和服務器端WCF的數據合同在WCF服務“類庫項目”下

商業實體

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; }

  }

}

WCF數據合同

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);

}

工作單位

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;
        }
    }    
  }

現在我的問題是,當我從商業項目中運行代碼,它應該只跟存儲庫並使用唯一的業務實體的成員,但它讓我把DAL商業項目中添加引用

這是我得到錯誤的代碼

 public IEnumerable<Member> GetAllMember()
    {
        using (var _uof = new MembershipManagement_UOF())
        {
            var entities = _uof.Member_Repository.GetAll();

            // return entities.ToList();

            return null;
        }
    }

錯誤

Severity    Code    Description Project File    Line    Suppression State
 Error  CS0012  The type 'Member' is defined in an assembly that is not referenced. You must add a reference to assembly 'App.DAL, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.  App.CoreServices    C:\My Work\Credit Union  Application\CreditSolutionApp\App.CoreServices\CoreServices\MembershipCore\MembershipCore.cs   23  Active

從原始帖子中很難分辨出來,但是我懷疑您對IGenericRepository接口的具體實現是從DAL而不是從BLL(業務邏輯層)引用Member類。 具體的存儲庫需要使用BLL中的Member類作為其通用TEntity類型。 具體存儲庫類的方法需要使用DAL Member類從數據庫加載數據,然后將那些DAL Member實例映射到BLL Member實例,然后返回BLL Member實例。

將DAL成員類重命名為MemberDto之類的內容可能有助於避免混淆。 因此,您可能最終會IGenericRepository<TEntity>類似的情況(其中IGenericRepository<TEntity>在BLL中,而MyMemberRepo在DAL中):

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...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM