【发布时间】:2022-09-24 09:07:23
【问题描述】:
我有这些课程
public class UserRole
{
public int RoleId { get; set; }
public int UserId { get; set: }
public virtual User User { get; set; }
public virtual Role Role { get; set; }
}
[Table(\"User\")]
public class User
{
public User()
{
UserRoles = new HashSet<UserRole>();
}
public int FirstName { get; set; }
public int UserId { get; set: }
public virtual ICollection<UserRole> UserRoles { get; set; }
}
[Table(\"Role\")]
public class Role
{
public Role()
{
UserRoles = new HashSet<UserRole>();
}
public int RoleId { get; set; }
public string RoleName { get; set; }
public virtual ICollection<UserRole> UserRoles { get; set; }
}
我正在尝试对UserRole 表进行简单插入
public class Run
{
DbContext context;
public Run()
{
context = new DbContext();
}
public void Validate(User user, int roleId)
{
InsertUserRole(user,roleId)
context.SaveChanges();
}
}
public void InsertUserRole(user targetUser, int roleId)
{
UserRole targetUserRole = targetUser.UserRoles
.Where(u => u.RoleId == roleId)
.FirstOrDefault();
if (targetUserRole == null)
{
targetUserRole = new UserRole();
targetUserRole.RoleId = roleId;
targetUserRole.UserId = targetUser.UserId;
context.UserRoles.Add(targetUserRole);
}
}
当我尝试插入 UserRole 表时,我得到一个异常
违反唯一键 \'UQ_Role_Name\'。无法在 dbo.Role 中插入重复键
我需要在
UserRole中插入行,因为用户不存在该角色,并且该角色存在于Role表中。请让我知道如何使用实体框架上下文插入
Userole表
-
这真的是引发异常的确切代码吗?我问是因为
userRole targetUserRole无法编译(应该是UserRole targetUserRole并且您显示的代码应该没问题,但实际上 EF 尝试将现有的Role插入数据库中。 -
@GertArnold是的,它是UserRole targetUserRole。如何停止插入Role表并仅插入UserRole,因为它存在于Role表中,我们应该只插入UserRole表。
标签: entity-framework entity-framework-6 ef-database-first