有人可以帮我为DeleteBehavior.ClientCascade编写正确的代码吗? 我有两个类
Account
和 Schedule
定义如下(Account
可以有许多 Schedule
对象):
public class Account : IdentityUser
{
public string Title { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public List<Schedule> Schedules { get; set; }
}
public class Schedule
{
public string AccountAccountId { get; set; }
public int ScheduleId { get; set; }
public DateTime Date { get; set; }
}
... and the context
public class DataContext : IdentityDbContext<Account>
{
public DbSet<Account> Accounts { get; set; }
public DbSet<Schedule> Schedules { get; set; }
public DataContext(IConfiguration configuration, DbContextOptions options) : base(options)
{
Configuration = configuration;
}
protected override void OnConfiguring(DbContextOptionsBuilder options)
{
// connect to sqlite database
options.UseSqlite(Configuration.GetConnectionString("WebApiDatabase"));
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
//modelBuilder.Entity<Account>().HasMany(e => e.RefreshTokens).WithOne(e => e.Account).IsRequired();
modelBuilder.Entity<Schedule>()
.HasOne(b => b.Account)
.HasMany(a => a.Schedules) <--- Error
.OnDelete(DeleteBehavior.ClientCascade); <--- Error
}
}
我正在关注这篇文章链接,但在尝试执行以下操作时,我的
DataContext
遇到错误:
modelBuilder.Entity<Schedule>()
.HasOne(b => b.Account)<--- error
.HasMany(a => a.Schedules)
.OnDelete(DeleteBehavior.ClientCascade);
本文档不完整。也许你应该首先尝试这个https://www.learnentityframeworkcore.com/configuration/one-to-many-relationship-configuration。 要定义一对多关系。您需要创建如下所示的 Schedule 类
public class Schedule
{
public string AccountAccountId { get; set; }
public int ScheduleId { get; set; }
public DateTime Date { get; set; }
public Account? Account { get;set; }
}
此处使用
Account?
使外键 AccounId 可为空。 modelBuilder.Entity<Schedule>()
.HasOne(s => s.Account)
.WithMany(a => a.Schedules);
或
modelBuilder.Entity<Account()
.HasMany(a => a.Schedules)
.WithOne(s => s.Account);
他们有相同的结果。必须首先在实体后面使用
Has..
,然后使用 With
。您的代码实际上使用了 2 Has...
方法。如果您没有将
.OnDelete(DeleteBehavior.ClientCascade);
添加到 ?
以使其可为空,则 Account?
可能会变成错误。