Я создал отношение «многие ко многим» EventUser
, которое содержит объекты userId
, EventId
и User
и Event
, а также логическое значение isPresent
, которое я использую для управленияПрисутствие пользователя для этого события.
Я создаю EventUser
, устанавливая идентификаторы и объекты, а затем добавляя его в список Event's
EventUser
.Однако когда я получаю Events
из базы данных, список EventUsers
возвращает только данные, поля UserId
, EventId
и IsPresent
, поля User
и Event
возвращают null
.
Это мои классы:
Сущность пользователя
public class User : AbpUser<User>
{
public const string DefaultPassword = "123qwe";
public string Instrument { get; set; }
public virtual ICollection<EventUser> EventUsers { get; set; }
public static string CreateRandomPassword()
{
return Guid.NewGuid().ToString("N").Truncate(16);
}
public static User CreateTenantAdminUser(int tenantId, string emailAddress)
{
var user = new User
{
TenantId = tenantId,
UserName = AdminUserName,
Name = AdminUserName,
Surname = AdminUserName,
EmailAddress = emailAddress,
Roles = new List<UserRole>(),
};
user.SetNormalizedNames();
return user;
}
}
Сущность события
public class Event : Entity
{
[Required]
public string Name { get; set; }
[Required]
public string Location { get; set; }
public string Address { get; set; }
public DateTime StartTime { get; set; }
public DateTime EndTime { get; set; }
public bool IsConfirmed { get; set; }
public int GroupId { get; set; }
public virtual ICollection<EventUser> EventUsers { get; set; }
public Event()
{
EventUsers = new List<EventUser>();
}
}
Класс EventUser
public class EventUser : Entity
{
public int EventId { get; set; }
public Event Event { get; set; }
public long UserId { get; set; }
public User User { get; set; }
public bool IsPresent { get; set; }
}
Метод OnModelCreating в моем DbContext, в котором я создаю отношение «многие ко многим»
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<EventUser>().HasKey(eu => new { eu.EventId, eu.UserId }); //.isUnique()?
modelBuilder.Entity<EventUser>().HasOne(eu => eu.Event)
.WithMany(e => e.EventUsers)
.HasForeignKey(eu => eu.EventId);
modelBuilder.Entity<EventUser>().HasOne(eu => eu.User)
.WithMany(u => u.EventUsers)
.HasForeignKey(eu => eu.UserId);
}
Метод AddGroupUsersToEvent в EventAppService, в котором я создаю и добавляю всех пользователей группы в событие как EventUsers.
public void AddAllEventUsersFromGroup(AddAllEventUsersFromGroupDto dto)
{
var e = _eventManager.GetEventById(dto.EventId);
var g = _groupManager.QueryGroups().FirstOrDefault(x => x.Id == dto.GroupId);
foreach (var user in g.Users)
{
var eu = new EventUser
{
EventId = e.Id,
Event = e,
UserId = user.Id,
User = user
};
e.EventUsers.Add(eu);
}
_eventManager.Update(e);
}
Метод ListAll в EventAppService, в котором я перечисляю все события
public IEnumerable<EventDto> ListAll()
{
var result = _eventManager.QueryEvents().Select(e => new EventDto
{
Id = e.Id,
Name = e.Name,
Location = e.Location,
Address = e.Address,
StartTime = e.StartTime,
EndTime = e.EndTime,
GroupId = e.GroupId,
EventUsers = e.EventUsers
}).OrderBy(e => e.StartTime).ToList();
return result;
}
Если я запускаю метод ListAll в Swagger, он возвращает список EventUsers из события, подобного этому:
"eventUsers": [
{
"eventId": 3,
"event": null,
"userId": 4,
"user": null,
"isPresent": true,
"id": 0
}
]
Нужно ли где-нибудь включать событие и объект пользователя при получении событий?Во время отладки я обнаружил, что объекты Event и User хороши, когда я использую их для создания EventUser, но возвращаются как null
, как только я получаю событие.