实体框架的SQLite提供程序有时不执行插入

问题描述 投票:0回答:1

命令应按特定顺序执行,而不是作为查询执行。我在

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!;
}
c# entity-framework
1个回答
0
投票

您错过了说您有另一个模型文件“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();
}
© www.soinside.com 2019 - 2024. All rights reserved.