У меня есть класс уведомлений
public class Notification
{
public int NotificationId { get; set; }
public string NotificationMessage { get; set; }
public DateTime NotificationSentOn { get; set; }
//TODO: not sure how to map this in fluent api
// a Notification can go to many users
public ICollection<ApplicationUser> ReceivingUsers { get; set; }
}
и расширение ApplicationUser
public class ApplicationUser : IdentityUser
{
public ApplicationUser()
{
IsAuthor = false;
}
public string Firstname { get; set; }
public string Lastname { get; set; }
public Gender Gender { get; set; }
public DateTime? DateOfBirth { get; set; }
public DateTime RegisteredDate { get; set; }
public bool IsAuthor { get; set; }
// foreign key to UserProfile using the string ID from ApplicationUser
public UserProfile MemberProfile { get; set; }
// collection of notifications for this user
public ICollection<Notification> Notifications { get; set; }
}
Вот ошибка, связанная со свойством Notifications в классе ApplicationUser
Невозможно определить отношение, представленное свойством навигации ApplicationUser.Notifications типа «ICollection».Либо настройте отношение вручную, либо игнорируйте это свойство, используя атрибут «[NotMapped]» или «EntityTypeBuilder.Ignore» в «OnModelCreating».
Я считаю, что отношение должно быть один-много,то есть одно Уведомление отправляется многим ApplicationUsers, но мой обычный шаблон в Entity Configuration не работает, я должен что-то упустить в одном из классов.
Я не уверен, как отобразить коллекцию Notification илиотношение Foreignkey к UserProfile с использованием свободно распространяемого API (я использую классы EntityConfiguration с использованием интерфейса IEntityTypeConfiguration)
Обновление Согласно ответу Camilo, я обновил свои конфигурации Entity Configuration, включив в них таблицу NavigationUser, в которой первичный ключ задан какследует
public class NotificationUserEntityConfiguration : IEntityTypeConfiguration<NotificationUser>
{
public void Configure(EntityTypeBuilder<NotificationUser> builder)
{
builder.HasKey(u => new { u.ApplicationUserId, u.NotificationId })
.HasName("PK_NotificationUser");
builder.Property(u => u.NotificationId)
.ValueGeneratedNever()
.IsRequired();
builder.Property(u => u.ApplicationUserId)
.ValueGeneratedNever()
.IsRequired();
}
}
Это вернуло следующее из скрипта создания базы данных
Он создал ForeignKey в таблице ApplicationUser
table.ForeignKey( name: "FK_AspNetUsers_Notifications_NotificationId",
column: x => x.NotificationId,
principalSchema: "MachineryCtx",
principalTable: "Notifications",
principalColumn: "NotificationId",
onDelete: ReferentialAction.Restrict);
и ForeignKey в таблице NotificationUsers назадна уведомления
table.ForeignKey( name: "FK_NotificationUser_Notifications_NotificationId",
column: x => x.NotificationId,
principalSchema: "MachineryCtx",
principalTable: "Notifications",
principalColumn: "NotificationId",
onDelete: ReferentialAction.Cascade);