Как абстрагировать удостоверение ASP.NET в чистой архитектуре, чтобы объекты на уровне домена могли ссылаться на пользовC#

Место общения программистов C#
Ответить
Anonymous
 Как абстрагировать удостоверение ASP.NET в чистой архитектуре, чтобы объекты на уровне домена могли ссылаться на пользов

Сообщение Anonymous »

Код: Выделить всё

public class ApplicationDbContext : IdentityDbContext, IApplicationDbContext
{

public DbSet Chats { get; set; }
public DbSet ChatParticipants { get; set; }
public DbSet ChatMessages { get; set; }

protected override void OnModelCreating(ModelBuilder builder)
{

builder.Entity(entity =>
{
//Has a list of ChatParticipants
//that should have a ApplicationUser as navigation property

});

builder.Entity(entity =>
{
entity.HasMany(chat => chat.Participants)
.WithOne(part => part.Chat)
.HasForeignKey(part => part.ChatId)
.OnDelete(DeleteBehavior.Cascade);

entity.HasMany(chat => chat.Messages)
.WithOne(message => message.Chat)
.HasForeignKey(message => message.ChatId)
.OnDelete(DeleteBehavior.Cascade);
});

builder.ApplyConfigurationsFromAssembly(Assembly.GetExecutingAssembly());
base.OnModelCreating(builder);
}
}

public class ApplicationUserEntity : IdentityUser, IApplicationUser
{
public override string Id { get; set; }
public override string Email { get; set; }
public List ChatParticipations { get; set; }
}

public class ChatEntity : BaseAuditableEntity
{
public List Participants { get; set; }
public List Messages { get; set; }
}

public class ChatParticipantEntity : BaseEntity
{
public string ApplicationUserId { get; set; }
public long ChatId { get; set; }
public ChatEntity Chat { get; set; }
}

public async Task>Handle
(GetSignedInUsersChatMessagesQuery request, CancellationToken cancellationToken)
{
List errors = new List();
string userId = _currentUserService.UserId;

//I am trying to get chats that include the participants object that should include
//the reference object => applicationUser
List chatEntities = _dbContext.Chats
.Where(c => c.Participants
.Any(p => p.ApplicationUserId
.Equals(userId)))
.Include(c => c.Participants)
.Include(c => c.Messages)
.ProjectTo(_mapper.ConfigurationProvider)
.ToList();

return CommonDataResult.Success(chats);
}

  • Я использую CQRS
  • Вся суть этого подхода в том, что я могу создавать простые запросы с использованием EntityFramwork для получения все, что мне нужно для общения.
  • Я приветствую любые предложения по изменению моего подхода.
  • Я пытался использовать интерфейс для абстрагирования ApplicationUserEntity, но EntityFrameork не будет отображать отношения с интерфейсом.


Подробнее здесь: https://stackoverflow.com/questions/786 ... ies-in-dom
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»