EF Core Add () метод удаляет записи базы данных - PullRequest
1 голос
/ 08 апреля 2019

Это выглядит странно, но это происходит: когда я пытаюсь добавить новые записи в мою БД с помощью EF Core, метод сначала удаляет некоторые другие записи.

У меня есть 3 таблицы базы данных с пользователями, организациями и позициями и 1 таблица, которая связывает данные, таблица 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; }
}

WebDbContext

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);
}

Мой метод

В моем методе я пытаюсь добавить новую позицию UserOrganizationPosition:

WebDbContext.Add(
    new UserOrganizationPosition{
        UserID = "aaa",
        OrganizationID = "BBB",
        PositionID = "222"
    }
);

Перед этим вызовом я проверяю, не существует ли комбинация, и знаю, что используемые идентификаторы существуют в других таблицах.

Моя база данных заполнена множеством UserOrganizationPosition, и когда я добавляю новую, некоторые другие UserOrganizationPosition удаляются. Кто-нибудь знает, как это может произойти?

Я не уверен на 100%, но похоже, что он не принимает несколько комбинаций с 2 ​​из 3 одинаковых комбинаций, подобных этой:

AAA BBB 222

ccc DDD 333 <- полностью другой, все нормально </p>

aaa DDD 444 <- уникально с aaa и DDD, равным некоторым другим ссылкам, все в порядке </p>

aaa BBB 444 <- соответствует 2 из 3 частей первой комбинации, будет удалено </p>

Опять же: я не уверен на 100% в этом!

1 Ответ

0 голосов
/ 09 апреля 2019

Попробуйте использовать ссылки на сущности, а не устанавливать FK напрямую. Извлеките пользователя, организацию и позиции из контекста и добавьте их ссылки на новую комбинацию и вызовите SaveChanges. Это должно гарантировать, что все ссылочные отношения сущностей установлены правильно, если вы позже осмотрите эти сущности. Для EF Core я рекомендую использовать теневые свойства для объявлений FK, чтобы избежать выставления двух отдельных представлений одного и того же отношения. (UserOrganizationPosition.PositionId и UserOrganizationPosition.Position.PositionId)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...