命令应按特定顺序执行,而不是作为查询执行。我在
InitializeAccount
方法运行时检查了日志。 dbContext
只插入了2个TaskTypeModel
。我希望查询的顺序与方法中规定的顺序相同。
但是,在日志中,我注意到
dbContext
在最后一个位置插入了 Users
。本来应该排在第二位的。可能是什么原因造成的?因为没有错误。它还会跳过 1 个插入查询。我尝试了 net 7 和 6。结果相同。
@page "/installation"
@inject ApplicationDbContext dbContext
<MudButton Variant="Variant.Filled" Color="Color.Primary" OnClick="Initialize">Initialize</MudButton>
<MudButton Variant="Variant.Filled" Color="Color.Primary" OnClick="InitializeAccount">Initialize Account</MudButton>
@code {
void Initialize()
{
dbContext.Sites.AddRange(new List<SiteModel>()
{
new(){ Name="Facebook", Url="https://www.facebook.com" },
new(){ Name="Instagram", Url="https://www.instagram.com" },
new(){ Name="Whatsapp", Url="https://web.whatsapp.com" },
new(){ Name="Telegram", Url="https://web.telegram.org" }
});
dbContext.TaskStatuses.AddRange(new List<TaskStatusModel>()
{
new(){ Name="Canceled" },
new(){ Name="Created" },
new(){ Name="Faulted" },
new(){ Name="RanToCompletion" },
new(){ Name="Running" }
});
dbContext.Settings.AddRange(new List<SettingModel>()
{
new(){ Type="WebDriver", Name="Headless", Value="true"},
new(){ Type="WebDriver", Name="UserDataDirectory", Value="Default"},
});
dbContext.SaveChanges();
}
void InitializeAccount()
{
SiteModel facebook = dbContext.Sites.First(s => s.Name == "Facebook");
dbContext.Users.Add(new UserModel
{
UserName="[email protected]",
Password="asdadadsadcvxvx2323232",
Site=facebook
});
dbContext.TaskTypes.Add(new TaskTypeModel { Name="GroupPost", Site=facebook });
dbContext.TaskTypes.Add(new TaskTypeModel { Name="PagePost", Site=facebook });
dbContext.TaskTypes.Add(new TaskTypeModel { Name="ScrapeGroupMembers", Site=facebook });
dbContext.SaveChanges();
}
}
任务类型模型.cs
public class TaskTypeModel
{
public int Id { get; set; }
public string Name { get; set; } = null!;
public int SiteId { get; set; }
public SiteModel Site { get; set; } = null!;
}
您错过了说您有另一个模型文件“SiteModel.cs”,其中包含 SiteModel 类,该类是关系中的 parent。因此,“facebook”站点是父类 SiteModel 实例,当您添加新子级 (TaskTypeModel) 时,您不应该放置对现有类的引用(该类必须保持为空),而应仅放置在其 id 处。 所以你正确的InitializeAccount()可能是:
void InitializeAccount()
{
SiteModel facebook = dbContext.Sites.First(s => s.Name == "Facebook");
int fbId=facebook.Id;
dbContext.Users.Add(new UserModel
{
UserName="[email protected]",
Password="asdadadsadcvxvx2323232",
SiteId=fbId
});
dbContext.TaskTypes.Add(new TaskTypeModel { Name="GroupPost", SiteId=fbId });
dbContext.TaskTypes.Add(new TaskTypeModel { Name="PagePost", SiteId=fbId });
dbContext.TaskTypes.Add(new TaskTypeModel { Name="ScrapeGroupMembers", SiteId=fbId });
dbContext.SaveChanges();
}