c# - .NET 5 - 防止更新自动增量列?
问题描述
我正在尝试在名为 MembershipID 的身份用户表上创建一个自动增量字段,但我遇到了一些问题。
我将身份用户子类化并创建了自己的“ApplicationUser”,因此我可以添加其他字段,这一切都很好。
应用程序用户.cs
public class ApplicationUser : IdentityUser
{
public int Currency { get; set; }
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int membershipID { get; set; }
public string Name { get; set; }
}
(注意 - 我已经尝试过使用和不使用 [key] 注释)。
问题 该字段在模型创建时生成并自动递增。但是,每次我更新模型时,比如说名称,我都会收到一条错误消息:
SqlException:无法更新标识列“membershipID”。
这是为什么?我认为通过说它是数据库生成的值它不会这样做吗?如何防止它更新列?我不是在尝试编辑自动递增字段,而是在编辑另一列,但不知何故它也尝试更新导致问题的其他字段。
谢谢大家。
解决方案
我发现以前有人报告过类似的问题。如果您使用核心 3.1,请尝试在 OnModelCreating 方法中添加类似的内容:
modelBuilder.Entity<ApplicationUser>().Property(u => u.membershipID).Metadata.SetAfterSaveBehavior(PropertySaveBehavior.Ignore);
这是类似的问题 -无法更新 Entity Framework Core 中的标识列。您可以在那里找到早期版本核心的解决方案。
推荐阅读
- graphics - 当它们到达像素/片段着色器时,法线和切线如何仍然正交?
- python - 如何计算数据框中的特定元素?
- tensorflow - 如何解决“KeyError:'/conv2d_1/kernel:0'”
- php - 如何在 WordPress 中使用按钮类型增加定制器添加控件 ID
- android-fragments - 将数据从片段保存到自定义会话
- c++ - 如何理解“std::relational operator (shared_ptr) 直接比较存储的指针”
- swift - 在完成 [Swift] [Firebase] 之前返回的函数
- database - 使用取消选项向 Oracle Apex DB 添加或删除行
- swift - 如何停止计时器发布者?
- c# - 如何在 .net 核心中注册继承的通用存储库