2015-06-22 4 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); 
... 
} 

и реализация интерфейса с Entity Framework кода первой, как

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 identity).

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

Я нашел [это] (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

Я попытался реализовать вашу идею, но теперь я не могу использовать класс UserManager из идентификатора asp.net рамки ... Как вы это делаете? – Disappointed

+0

@Disappointed, если честно, я написал свои собственные. Можете ли вы обновить вопрос о том, как вы реализовали UserManager в данный момент? –