将项目添加到我的数据库 (DBContext - EF) 时,它会将这些项目添加到 table 中的随机位置,而不是一个接一个地添加。出了什么问题?
When adding items to my DB (DBContext - EF), it adds those items at random places in the table rather than after one another. What goes wrong?
所以我有一个简单的 C# web API,在 "checklistitem" 控制器中有一些 CRUD 方法。基本上一个人可以有一个包含 0 - 多个清单项目的清单,并且清单项目 必须 属于 1 个人(通过 userId)。
所以我已经为我的数据库添加了 3 个 CLI(检查列表项)给我(现在是我的应用程序中的唯一一个人)和我的用户 ID(这是一个 GUID)。我还在 CLI 中使用 GUID 作为 Id,因此您没有 cli 1、2、3 等,但有 guid1、guid2、guid3 等...
无论如何,在种子之后,项目在列表中的位置保持不变,第一个 firstItem 为 1,secondItem 为 2,thirdItem 为 3。当我添加一个项目时,我输入标题和描述(例如在 Postman 中)然后在我的存储库模式中生成一个新的 Guid,就在将它添加到我的 DBContext 并保存更改之前。
添加项目时,它似乎是随机添加的,而不是在 "stack" 个项目的末尾添加。因此,如果我添加 "fourthItem",我希望它成为 table 中的第 4 个项目,但它被添加为位置 2...当我继续添加项目时,它只是随机地以任何顺序抛出它们感觉好像……
这是因为我在 table 中使用 GUID 吗?或者是其他东西?我该如何解决这个问题或向我的代码中添加一些内容以使其正常工作"properly"?
这是我的模型:
public class ChecklistItem: IEntity
{
[Key]
public Guid Id { get; set; }
[Required]
public string Title { get; set; }
public string Description { get; set; }
public bool IsChecked { get; set; } = false;
[Required]
public Guid UserId { get; set; }
public virtual User User { get; set; }
}
我的回购代码(用于创建):
public ChecklistItem Create(ChecklistItem o)
{
o.Id = Guid.NewGuid();
var cli = _TCACtx.ChecklistItems.Add(o);
_TCACtx.SaveChanges();
return cli.Entity;
}
项目种子:
modelBuilder.Entity<ChecklistItem>().HasData(
new ChecklistItem() { Id = Guid.NewGuid(), Title = "My first item", Description = "this is my first item", IsChecked = false, UserId = new Guid("63EE02DA-4360-45AD-87C2-E6D36B6F50AA") },
new ChecklistItem() { Id = Guid.NewGuid(), Title = "My second item", Description = "this is my second item", IsChecked = true, UserId = new Guid("63EE02DA-4360-45AD-87C2-E6D36B6F50AA") },
new ChecklistItem() { Id = Guid.NewGuid(), Title = "My third item", Description = "this is my third item", IsChecked = false, UserId = new Guid("63EE02DA-4360-45AD-87C2-E6D36B6F50AA") }
);
(userId guid 将这些项目链接到我的 "user" 模型,也就是应用程序中的我)。
如果需要更多代码,请告诉我,谢谢!
编辑:查看我的数据库的图像。添加的项目就像他们说的那样(第一,第二,第三,第四,第五等......)。前 3 个项目已播种!
它们不是随机放置的,而是按 GUID
排列的。由于 GUID
本质上是随机的(不完全是,而是改天的讨论),因此顺序将看起来是随机的,但它实际上是排序的,就好像它是一个字符串一样。如果你想按添加的顺序显示它们,你需要使用一个整数 ID,或者如果你真的需要知道它们是什么时候放置的,而不仅仅是视觉上看到排列的东西,使用日期和排序。
所以我有一个简单的 C# web API,在 "checklistitem" 控制器中有一些 CRUD 方法。基本上一个人可以有一个包含 0 - 多个清单项目的清单,并且清单项目 必须 属于 1 个人(通过 userId)。
所以我已经为我的数据库添加了 3 个 CLI(检查列表项)给我(现在是我的应用程序中的唯一一个人)和我的用户 ID(这是一个 GUID)。我还在 CLI 中使用 GUID 作为 Id,因此您没有 cli 1、2、3 等,但有 guid1、guid2、guid3 等...
无论如何,在种子之后,项目在列表中的位置保持不变,第一个 firstItem 为 1,secondItem 为 2,thirdItem 为 3。当我添加一个项目时,我输入标题和描述(例如在 Postman 中)然后在我的存储库模式中生成一个新的 Guid,就在将它添加到我的 DBContext 并保存更改之前。
添加项目时,它似乎是随机添加的,而不是在 "stack" 个项目的末尾添加。因此,如果我添加 "fourthItem",我希望它成为 table 中的第 4 个项目,但它被添加为位置 2...当我继续添加项目时,它只是随机地以任何顺序抛出它们感觉好像……
这是因为我在 table 中使用 GUID 吗?或者是其他东西?我该如何解决这个问题或向我的代码中添加一些内容以使其正常工作"properly"?
这是我的模型:
public class ChecklistItem: IEntity
{
[Key]
public Guid Id { get; set; }
[Required]
public string Title { get; set; }
public string Description { get; set; }
public bool IsChecked { get; set; } = false;
[Required]
public Guid UserId { get; set; }
public virtual User User { get; set; }
}
我的回购代码(用于创建):
public ChecklistItem Create(ChecklistItem o)
{
o.Id = Guid.NewGuid();
var cli = _TCACtx.ChecklistItems.Add(o);
_TCACtx.SaveChanges();
return cli.Entity;
}
项目种子:
modelBuilder.Entity<ChecklistItem>().HasData(
new ChecklistItem() { Id = Guid.NewGuid(), Title = "My first item", Description = "this is my first item", IsChecked = false, UserId = new Guid("63EE02DA-4360-45AD-87C2-E6D36B6F50AA") },
new ChecklistItem() { Id = Guid.NewGuid(), Title = "My second item", Description = "this is my second item", IsChecked = true, UserId = new Guid("63EE02DA-4360-45AD-87C2-E6D36B6F50AA") },
new ChecklistItem() { Id = Guid.NewGuid(), Title = "My third item", Description = "this is my third item", IsChecked = false, UserId = new Guid("63EE02DA-4360-45AD-87C2-E6D36B6F50AA") }
);
(userId guid 将这些项目链接到我的 "user" 模型,也就是应用程序中的我)。
如果需要更多代码,请告诉我,谢谢!
编辑:查看我的数据库的图像。添加的项目就像他们说的那样(第一,第二,第三,第四,第五等......)。前 3 个项目已播种!
它们不是随机放置的,而是按 GUID
排列的。由于 GUID
本质上是随机的(不完全是,而是改天的讨论),因此顺序将看起来是随机的,但它实际上是排序的,就好像它是一个字符串一样。如果你想按添加的顺序显示它们,你需要使用一个整数 ID,或者如果你真的需要知道它们是什么时候放置的,而不仅仅是视觉上看到排列的东西,使用日期和排序。