Удалить данные, связанные с другой таблицей базы данных в базе данных SQL Server, используя Entity Framework? - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь удалить одну из следующих строк из моей базы данных:

enter image description here

с этим кодом:

public ActionResult DeleteRowUsers(int id)
{
        var status = false;
        var message = "";

        using (ConcurrentDBEntities2 db = new ConcurrentDBEntities2())
        {
            var data = db.Companies.Find(id);

            if (data != null)
            {
                db.Companies.Remove(data);
                db.SaveChanges();
                status = true;
            }
            else
            {
                message = "Error!";
            }

            return RedirectToAction("Users");
        }
}

Однако CompanyID связан с другой таблицей:

enter image description here

Когда я пытаюсь удалить это, я получаю следующую ошибку:

Оператор DELETE конфликтует с ограничением REFERENCE \ "FK_ApiRedirect_CompanyID \". Конфликт произошел в базе данных \ "ConcurrentDB \", таблице \ "dbo.ApiRedirects \", столбце "CompanyID". \ R \ nОтношение было прервано.

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

Кто-нибудь знает, как этого добиться?

1 Ответ

1 голос
/ 10 июля 2019

В классе, где вы расширяете DbContext (это должно выглядеть примерно так):

public class MyContext : DbContext
{
  ...
}

вам необходимо переопределить метод OnModelCreating() следующим образом:

public class MyContext : DbContext
{
  protected override void OnModelCreating(ModelBuilder modelBuilder)
  {
    modelBuilder.Entity<Companies>()
            .HasOne(c => c.CompanyId)
            .WithMany(a => a.ApiRedirects)
            .HasForeignKey(a => a.CompanyId)
            .OnDelete(DeleteBehavior.Cascade);
  }
}

Но, вероятно, для этого потребуется пересоздать вашу базу данных, чтобы применить это изменение.Однако именно так вы можете манипулировать DeleteBehavior в EF.

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