c# - 添加多对多关系EF时的身份插入
问题描述
我建立了多对多关系,并且该表是使用健身房 Web 应用程序的类和用户创建的,但是当我尝试向该表插入值时,我得到SqlException:当 IDENTITY_INSERT 时,无法在表“类”中插入标识列的显式值设置为关闭。
我的模型是类
public class Class
{
[Key]
public int ClassID { get; set; }
...
public List<UserClass> userClasses { get; set; }
}
用户:
public class User
{
[Key]
public int UserID{ get; set; }
...
public List<UserClass> userClasses { get; set; }
}
他们合并的地方:
public class UserClass
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long UserClassID { get; set; }
public int UserID { get; set; }
public int ClassID { get; set; }
public User user { get; set; }
public Class @class { get; set; }
}
我的上下文类modelbiulder函数:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<UserClass>()
.HasKey(x => new { x.UserID, x.ClassID });
//If you name your foreign keys correctly, then you don't need this.
modelBuilder.Entity<UserClass>()
.HasOne(uc => uc.user)
.WithMany(p => p.userClasses)
.HasForeignKey(uc => uc.UserID);
modelBuilder.Entity<UserClass>()
.HasOne(uc => uc.@class)
.WithMany(t => t.userClasses)
.HasForeignKey(uc => uc.ClassID);
}
以及我与 ajax 一起使用的这个功能
public IActionResult BookTheClass(int ClassID)
{
User user = _context.users.Find(_auth.User.UserID);
Class selectedClass = _context.classes.Find(ClassID);
selectedClass.userClasses = new List<UserClass>() {
new UserClass{
user=user,
@class=selectedClass
}
};
_context.classes.Add(selectedClass);
_context.SaveChanges();
return PartialView("~/Views/PartialViews/ClassBooked.cshtml");
}
其他类似的问题有一个我没有的模型构建器问题。
解决方案
标识列会跟踪下一个空闲号,您不需要自己生成 ClassId。新的 id 可以通过SELECT SCOPE_IDENTITY()
如果您真的想向标识列插入值(不推荐),那么您必须打开Identity Insert
表的属性。请参阅下面的 SQL 以执行相同的操作
SET IDENTITY_INSERT classes ON
推荐阅读
- html - 有没有办法在 vue (nuxt.js) 中进行部分文本样式化
- angular - 为什么延迟加载路由在 angular12 中不起作用?
- java - 在java中创建一个二维(2D)数组
- python - Heroku 部署中的 Cassandra 连接问题
- firebase - 如何通过firebase搜索
- git - 从 github 桌面提交更改时,我收到一条错误消息:“警告:LF 将在 author/test/index.html 中被 CRLF 替换”
- linux - docker入口点中的权限被拒绝
- python - Django 上的 MakeMigration 错误 - ImportError:无法导入名称“UserProfile”
- django - Django m2m_changed 在 post_clear 上清除对象
- c# - 如何获取当前目录中的列表显示文件夹?