C# EF Core Add()方法删除数据库记录

C# EF Core Add()方法删除数据库记录,c#,entity-framework,asp.net-core,entity-framework-core,C#,Entity Framework,Asp.net Core,Entity Framework Core,这看起来很奇怪,但确实发生了:当我尝试使用EF Core向我的DB添加新记录时,该方法首先删除一些其他记录 我有3个包含用户、组织和职位的数据库表,还有一个链接数据的表UserOrganizationPosition表。每种组合都是可能的,但应该是唯一的 型号 public partial class User { public string UserID { get; set; } public string UserName { get; set; } public

这看起来很奇怪,但确实发生了:当我尝试使用EF Core向我的DB添加新记录时,该方法首先删除一些其他记录

我有3个包含用户、组织和职位的数据库表,还有一个链接数据的表UserOrganizationPosition表。每种组合都是可能的,但应该是唯一的

型号

public partial class User
{
    public string UserID { get; set; }
    public string UserName { get; set; }
    public virtual List<UserOrganizationPosition> _uop { get; set; }
}

public partial class Organization
{
    public string OrganizationID { get; set; }
    public string OrganizationName { get; set; }
    public virtual List<UserOrganizationPosition> _uop { get; set; }
}

public partial class Position
{
    public string PositionID { get; set; }
    public string PositionName { get; set; }
    public virtual List<UserOrganizationPosition> _uop { get; set; }
}

public partial class UserOrganizationPosition 
{
    public string UserID { get; set; }
    public virtual User _user { get; set; }
    public string OrganizationID { get; set; }
    public virtual Organiaztion _organization { get; set; }
    public string PositionID { get; set; }
    public virtual Position _position { get; set; }
}
在此调用之前,我检查组合是否不存在,并且我知道使用的ID确实存在于其他表中

我的数据库中填充了许多UserOrganizationPosition,当我添加一个新数据库时,其他一些UserOrganizationPosition会被删除。有人知道这是怎么发生的吗

我不是100%确定,但它似乎不接受2/3的多个组合相同的组合如下:

aaa BBB 222


ccc DDD 333考虑使用实体引用,而不是直接设置FKs。从上下文中检索用户、组织和职位,并将其引用添加到新的组合实体,然后调用
SaveChanges
。如果以后检查这些实体,则应确保正确设置所有引用的实体关系。对于EF Core,我建议对FK声明使用阴影属性,以避免暴露同一关系的两个单独表示。(UserOrganizationPosition.PositionId和UserOrganizationPosition.Position.PositionId)

考虑使用实体引用,而不是直接设置FKs。从上下文中检索用户、组织和职位,并将其引用添加到新的组合实体,然后调用
SaveChanges
。如果以后检查这些实体,则应确保正确设置所有引用的实体关系。对于EF Core,我建议对FK声明使用阴影属性,以避免暴露同一关系的两个单独表示。(UserOrganizationPosition.PositionId和UserOrganizationPosition.Position.PositionId)

我不能在一个干净的新项目中仅使用post中的代码进行复制-可以吗?是的,我可以。我发现了问题!当我检查一个组合是否存在时,我调用了一个方法,该方法从一个组合中删除了一些位置(视图所需的位置),不幸地被保存到了数据库中。我无法在一个干净的新项目中仅使用post中的代码进行复制-可以吗?是的,我可以。我发现了问题!当我检查组合是否存在时,我调用了一个方法,该方法从组合中删除了一些位置(视图需要),不幸的是,该方法被保存到了数据库中。
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<UserOrganizationPosition>(entity =>
    {
        entity.HasKey(uop => new { uop.UserID, uop.OrganizationID, uop.PositionID});
    });

    modelBuilder.Entity<UserOrganizationPosition>()
        .HasOne(uop => uop._user)
        .WithMany(u => u._uop)
        .HasForeignKey(uop => uop.UserID);
    modelBuilder.Entity<UserOrganizationPosition>()
        .HasOne(uop => uop._organization)
        .WithMany(o => o._uop)
        .HasForeignKey(uop => uop.OrganizationID);
    modelBuilder.Entity<UserOrganizationPosition>()
        .HasOne(uop => uop._position)
        .WithMany(p => p._uop)
        .HasForeignKey(uop => uop.PositionID);
}
WebDbContext.Add(
    new UserOrganizationPosition{
        UserID = "aaa",
        OrganizationID = "BBB",
        PositionID = "222"
    }
);