2015-06-22 16 views
2

我開發了我的數據層與POCO類和持久性無知原則在我心中。我的代碼是這樣持久性無知與ASP.NET身份框架和EF代碼第一

POCO類

public class Report 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    ... 
    } 
} 

倉庫接口

public interface IReportRepository 
{ 
    IEnumerable<Report> GetAllReports(); 
    Report GetReport(int reportId); 
... 
} 

,並與實體框架代碼第一個接口實現,就像

public class EFReportRepository : BaseRepository, IReportRepository 
{ 
    public EFReportRepository(string connectionString) 
     : base(connectionString) 
    { 
    } 

    public IEnumerable<Report> GetAllReports() 
    { 
     return DbContext.Reports.Include(r => r.AggregationParameters).Include(r => r.ErrorAttachment).Include(r => r.ExcelAttachment).Include(r => r.XmlAttachment).ToList(); 
    } 

    public Report GetReport(int reportId) 
    { 
     return DbContext.Reports.Include(r => r.AggregationParameters).Include(r => r.ErrorAttachment). 
      Include(r => r.ExcelAttachment).Include(r => r.XmlAttachment).SingleOrDefault(r => r.Id == reportId); 
    } 

一切工作順利,直到授權( asp.net身份)被添加。現在

using Microsoft.AspNet.Identity.EntityFramework; 

namespace DataRepository.Models 
{ 
    public class MyUser : IdentityUser 
    { 
    } 
} 

每個報告都有用戶創建此報告

public class Report 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    ... 
    public MyUser CreatedByUser { get; set; } 
    public string CreatedByUserId { get; set; } 
    ... 
    } 
} 

現在我有一個與實體框架緊密相依,我想省略,因爲從IdentityUser類繼承的。

我該如何排除這種依賴關係?我會感謝任何幫助)

更新 現在的問題是與創建UserManager對象。
UserManager需要IUserStore作爲輸入參數。這個接口在Microsoft.AspNet.Identity.EntityFramework了命名空間實現,被稱爲UserStore,所以我的代碼是這樣

manager = new UserManager<MyUser>(new UserStore<MyUser>(MyDbContext)). 

但現在MYUSER類不是從IdentityUser繼承,所以這段代碼被打破(UserStore需要此類型的類)

+0

我發現[this](http://timschreiber.com/2015/01/14/persistence-ignorant-asp-net-identity-with-patterns-part-1/)。也許將有助於某人 – Disappointed

回答

1

我用這種方法工作正常;

namespace DataRepository.Models 
{ 
    public class MyUser 
    { 
     public int Id { get; } 
     //define other user properties 
    }  
} 

namespace SomeOtherNamespace 
{ 
    public class MyIdentityUser : IdentityUser 
    { 
     private MyUser _User; 

     public MyIdentityUser(MyUser user) 
     { 
      _User = user; 
     } 

     public int Id { get { return _User.Id; } } 
     //define other IdentityUser properties by using the MyUser object 
    } 
} 
+0

謝謝迪翁的幫助和這麼晚的反應(我工作非常繁忙,這項任務有低優先級) – Disappointed

+0

我試圖實現你的想法,但現在我不能使用從asp.net身份UserManager類框架......你怎麼做到的? – Disappointed

+0

@老實說,我寫了我自己的。你能否更新這個問題,你現在如何實現UserManager? –