创建表单需要 EF Core 3.1 Key/Identity 字段,我不明白为什么
EF Core 3.1 Key/Identity field being required by the Create form and I can't figure out why
EDIT/UPDATE:
我想添加一些有趣的东西。我从“创建”页面中删除了 OrgId,并且可以提交新记录,但随后数据库拒绝了它,并显示我无法将 NULL 值插入 table 的错误。似乎我需要以某种方式完全不将该字段传递给 SQL ?嗯。
----------------------------
我不希望我的代码为此 OrgId 字段生成任何值。数据库通过将先前的值递增 1 来完成它。它是 SQL 中的传统 ID 字段。问题是每次我创建新记录时,创建页面上的表单都要求我输入 OrgId。如果我输入它那么一切正常,但问题是我无法输入它,因为数据库控制着这个字段。
我的 OrgId 字段没有数据注释。我的所有属性都使用 Fluent API。虽然,我已经尝试过像 [DatabaseGenerated(DatabaseGeneratedOption.Identity)].
这样的注释
entity.HasKey(e => e.OrgId);
entity.Property(e => e.OrgId)
HasColumnName("OrgID")
我已经尝试附加所有这些值以及更多值,但没有什么能阻止这种行为。我已经单独尝试了每一个,根本没有属性,以上所有的组合。
.ValueGeneratedNever()
.UseSqlServerIdentityColumn() // deprecated
.ValueGeneratedOnAdd()
.UseIdentityColumn();
视图非常简单,这里没有任何内容需要我输入 OrgId。
<div class="form-group">
<label asp-for="OrgId" class="control-label"></label>
<input asp-for="OrgId" class="form-control" />
<span asp-validation-for="OrgId" class="text-danger"></span>
</div>
模型也很简单
public int OrgId { get; set; }
我在这个小问题上花了好几个小时,应该不难。我什至再次用脚手架重建了我的整个项目,以确保我没有无意中添加任何东西。即使在我的新项目中,我也会遇到同样的行为。我什至尝试过一些俗气的事情,比如弄乱 getters/setters。我觉得是 属性 某处使表单需要此字段,但我无法在任何地方找到它。
如前所述,确保数据库列是 Auto_Increment 正确的标识列。
EDIT/UPDATE:
我想添加一些有趣的东西。我从“创建”页面中删除了 OrgId,并且可以提交新记录,但随后数据库拒绝了它,并显示我无法将 NULL 值插入 table 的错误。似乎我需要以某种方式完全不将该字段传递给 SQL ?嗯。
----------------------------
我不希望我的代码为此 OrgId 字段生成任何值。数据库通过将先前的值递增 1 来完成它。它是 SQL 中的传统 ID 字段。问题是每次我创建新记录时,创建页面上的表单都要求我输入 OrgId。如果我输入它那么一切正常,但问题是我无法输入它,因为数据库控制着这个字段。
我的 OrgId 字段没有数据注释。我的所有属性都使用 Fluent API。虽然,我已经尝试过像 [DatabaseGenerated(DatabaseGeneratedOption.Identity)].
这样的注释entity.HasKey(e => e.OrgId);
entity.Property(e => e.OrgId)
HasColumnName("OrgID")
我已经尝试附加所有这些值以及更多值,但没有什么能阻止这种行为。我已经单独尝试了每一个,根本没有属性,以上所有的组合。
.ValueGeneratedNever()
.UseSqlServerIdentityColumn() // deprecated
.ValueGeneratedOnAdd()
.UseIdentityColumn();
视图非常简单,这里没有任何内容需要我输入 OrgId。
<div class="form-group">
<label asp-for="OrgId" class="control-label"></label>
<input asp-for="OrgId" class="form-control" />
<span asp-validation-for="OrgId" class="text-danger"></span>
</div>
模型也很简单
public int OrgId { get; set; }
我在这个小问题上花了好几个小时,应该不难。我什至再次用脚手架重建了我的整个项目,以确保我没有无意中添加任何东西。即使在我的新项目中,我也会遇到同样的行为。我什至尝试过一些俗气的事情,比如弄乱 getters/setters。我觉得是 属性 某处使表单需要此字段,但我无法在任何地方找到它。
如前所述,确保数据库列是 Auto_Increment 正确的标识列。