Я работаю над школьным проектом, включающим ASP. NET Core MVC, и я также использую EF Core, с которым, похоже, не могу понять, потому что я продолжаю получать эту ошибку:
Оператор INSERT конфликтует с ограничением FOREIGN KEY «FK_Transactions_Accounts_AccountId». Конфликт произошел в базе данных «MoneyManagerDB», таблица «dbo.Accounts», столбец «Id».
Layout
Каждый пользователь (ApplicationUser
) имеет 0..n
учетных записей (банковский счет, кредитная карта и т. д. c.), и каждая учетная запись имеет 0..n
транзакций, каждая из которых имеет 1 категорию.
У меня есть некоторые ошибки, которые я не совсем понимаю, как исправить (и да, я просмотрел другие сообщения, но они, похоже, не помогли)
Модели
public class ApplicationUser : IdentityUser
{
[Required,
MaxLength(50, ErrorMessage = "Username cannot exceed 50 characters")]
public string Name { get; set; }
public DateTime RegistrationDate { get; set; }
public List<Account> Accounts { get; set; } = new List<Account>();
}
public class Entity
{
[Key]
public int Id { get; set; }
[Required]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public DateTime CreatedOn { get; set; } = DateTime.UtcNow;
}
public class Account : Entity
{
public string Name { get; set; }
[Column(TypeName = "decimal(18,2)")]
public decimal Balance { get; set; }
public List<Transaction> Transactions { get; set; } = new List<Transaction>();
public string ApplicationUserId { get; set; }
public ApplicationUser ApplicationUser { get; set; }
}
public class Transaction : Entity
{
public string Name { get; set; }
[Column(TypeName = "decimal(18,2)")]
public decimal Amount { get; set; }
public Category Category { get; set; }
public int AccountId { get; set; }
public Account Account { get; set; }
}
public class Category : Entity
{
public string Name { get; set; }
public int TransactionId { get; set; }
public Transaction Transaction { get; set; }
}
DbContext
public class AppDbContext : IdentityDbContext<ApplicationUser>
{
public AppDbContext(DbContextOptions options) : base(options)
{
}
public DbSet<ApplicationUser> Users { get; set; }
public DbSet<Account> Accounts { get; set; }
public DbSet<Transaction> Transactions { get; set; }
public DbSet<Category> Categories { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<ApplicationUser>()
.HasMany(user => user.Accounts)
.WithOne(account => account.ApplicationUser)
.HasForeignKey(account => account.ApplicationUserId)
.IsRequired();
modelBuilder.Entity<Account>()
.HasMany(account => account.Transactions)
.WithOne(transaction => transaction.Account)
.HasForeignKey(transaction => transaction.AccountId)
.IsRequired();
modelBuilder.Entity<Transaction>()
.HasOne(transaction => transaction.Account)
.WithMany(account => account.Transactions)
.HasForeignKey(transaction => transaction.AccountId)
.IsRequired();
modelBuilder.Entity<Transaction>()
.HasOne(transaction => transaction.Category)
.WithOne(category => category.Transaction)
.HasForeignKey<Category>(category => category.TransactionId)
.IsRequired();
modelBuilder.Entity<Category>()
.HasOne(category => category.Transaction)
.WithOne(transaction => transaction.Category)
.HasForeignKey<Transaction>(transaction => transaction.Id);
}
}
Кажется, я не могу правильно понять часть базы данных и не уверен, что делать. Кто может помочь, тот спасает жизнь!