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 не будет отображать отношения с интерфейсом.
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); }
[/code] [list] Я использую CQRS [*]Вся суть этого подхода в том, что я могу создавать простые запросы с использованием EntityFramwork для получения все, что мне нужно для общения. [*]Я приветствую любые предложения по изменению моего подхода. [*]Я пытался использовать интерфейс для абстрагирования ApplicationUserEntity, но EntityFrameork не будет отображать отношения с интерфейсом. [/list]
Я работаю над проектом .net 8 после чистой архитектуры , где я хочу правильно реализовать шаблон хранилища , придерживаясь принципов проектирования, управляемых доменом. :
Доменное слое: содержит сущности и логику доменов.
Прикладной уровень:...
Я и мой коллега спорим о том, где лучше всего сопоставлять наши объекты сущностей или удаленные объекты dto с простыми объектами домена.
Наша структура выглядит следующим образом. .
источник (включает dao) > репо (включает исходный код) > usecase...
Я и мой коллега спорим о том, где лучше всего сопоставлять наши объекты сущностей или удаленные объекты dto с простыми объектами домена.
Наша структура выглядит следующим образом. .
источник (включает dao) > репо (включает исходный код) > usecase...
'M Работа над приложением Android с использованием архитектуры MVVM с принципами чистого кода. Приложение имеет три уровня:
ui -> domain -> data (Repository -> Источник данных)
из Слой данных, я хочу вернуть объект домена для поддержания...
'M Работа над приложением Android с использованием архитектуры MVVM с принципами чистого кода. Приложение имеет три уровня:
ui -> domain -> data (Repository -> Источник данных)
из Слой данных, я хочу вернуть объект домена для поддержания...