У меня есть 3 эти модели. Event(событие) - основная модель и 2 дополнительные модели: EventMember(участник события) и EventInvitation(приглашение на событие).
public class Event
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public Guid GuidId { get; set; }
public string Title { get; set; }
public string Desc { get; set; }
public virtual ICollection<EventMember> Members { get; set; }
public virtual ICollection<EventInvitation> invitations { get; set; }
}
public class EventInvitation
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public Guid GuidId { get; set; }
public string Type { get; set; }
public string Comment { get; set; }
public int EventId { get; set; }
[JsonIgnore]
public virtual Event Event { get; set; }
public int MemberId { get; set; }
[JsonIgnore]
public virtual EventMember? Member { get; set; }
}
public class EventMember
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public Guid GuidId { get; set; }
public string Comment { get; set; }
public int EventId { get; set; }
[JsonIgnore]
public virtual Event Event { get; set; }
public virtual EventInvitation Invitation { get; set; }
}
Я хочу создать связь между моделями по следующему принципу - Member может быть добавлен в Event без приглашение как обязательный участник или же сначала мы создаем invitation и связанного с ним Member, если по итогу приглашение будет утверждено мы добавляем Member в колекцию Event, а само invitation - удаляем.
Выходит связь где Member может существовать без invitation, но invitation для создания нужно так же создать Member.
Для выполнения своего плана я так же я уже создал необходимые поля и связь но не уверен сделал ли я это правильно?
modelBuilder.Entity<Event>()
.HasMany(p => p.Members)
.WithOne(c => c.Event)
.HasForeignKey(c => c.EventId);
modelBuilder.Entity<Event>()
.HasMany(p => p.invitations)
.WithOne(c => c.Event)
.HasForeignKey(c => c.EventId);
modelBuilder.Entity<EventInvitation>()
.HasOne(e => e.Member)
.WithOne(e => e.Invitation)
.HasForeignKey<EventInvitation>(e => e.MemberId);