相关疑难解决方法(0)

级联删除与实体框架 - 由EF删除的相关实体

我在实体框架中删除了一个问题.简而言之,EF显式尝试从数据库中删除实体,即使我已经明确地将EF配置为在数据库中使用级联删除.

我的设计:

我有三种实体类型MainEntity,EntityTypeAEntityTypeB.EF已经配置在删除时使用级联删除EntityTypeAEntityTypeB.换句话说,如果我删除了一个实例MainEntity,我希望删除所有相关EntityTypeAEntityTypeB实例.我从不删除EntityTypeAEntityTypeB不删除他们的父母.

我的问题是EF明确地发出了一个DELETE声明EntityTypeA,导致我的应用程序崩溃.

这就是我的模型:

这些关系具有以下非默认配置:

  • MainEntity -> EntityTypeA OnDelete: Cascade
  • MainEntity -> EntityTypeB OnDelete: Cascade

这种关系EntityTypeA -> EntityTypeBOnDelete: None

数据库内容

INSERT INTO MainEntities (Name) values ('Test')
insert into EntityTypeA (MainEntityID) VALUES (1)
insert into EntityTypeB (MainEntityID, EntityTypeAId) VALUES (1, 1)
insert into EntityTypeB (MainEntityID, EntityTypeAId) VALUES (1, 1)
Run Code Online (Sandbox Code Playgroud)

我的代码:

class Program
{ …
Run Code Online (Sandbox Code Playgroud)

entity-framework cascading-deletes

29
推荐指数
2
解决办法
4万
查看次数

如何在父实体框架CF之前删除子实体?

我试图使用EF代码优先删除数据库记录(deleteMe)和它的子(deleteMe.Prices).

foreach (var deleteMe in deleteThese)
{ 
   // Delete validation
   if(CanDeleteItem(deleteMe.ItemId))
   {
      db.Entry(deleteMe).State = EntityState.Deleted;

      foreach (var item in deleteMe.Prices)
      {
         db.Entry(item).State = EntityState.Deleted; // cascade delete
      }
   }
}
db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

但是,实体框架似乎无法跟踪在父项之前应删除子记录的事实.我收到错误:

DELETE语句与REFERENCE约束"ItemPrice_Item"冲突.
冲突发生在数据库"DEVDB",表"dbo.ItemPrices",列'Item_ItemId'中.
该语句已终止.

我如何在EF中执行此删除?

database entity-framework entity-framework-4.1

23
推荐指数
4
解决办法
5万
查看次数

如何删除具有外键约束的记录?

启动了一个新的ASP.NET MVC 3应用程序并收到以下错误:

无法删除主键值,因为仍然存在对此键的引用.

怎么解决这个?

型号(EF代码优先)

public class Journal
{
    public int JournalId { get; set; }
    public string Name { get; set; }
    public virtual List<JournalEntry> JournalEntries { get; set; }
}
public class JournalEntry
{
    public int JournalEntryId { get; set; }
    public int JournalId { get; set; }
    public string Text { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

调节器

//
// POST: /Journal/Delete/5

[HttpPost, ActionName("Delete")]
public ActionResult DeleteConfirmed(int id)
{            
    Journal journal = db.Journals.Find(id);
    db.Journals.Remove(journal);
    db.SaveChanges(); // **exception occurs …
Run Code Online (Sandbox Code Playgroud)

c# asp.net asp.net-mvc entity-framework entity-framework-4.1

9
推荐指数
2
解决办法
3万
查看次数

如何在Entity框架代码第一个数据库中删除相关对象?

DBContext类是

public class VGDB : DbContext
    {        
        public DbSet<Planet> Planets { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

模型看起来像:

public class Planet
    {
        [Key]
        public int Id { get; set; }
        public string Name { get; set; }

        ...

        public List<Building> Constructions { get; set; } 
    }


public class Building
    {
        [Key]
        public int Id { get; set; }
        public decimal Lvl { get; set; }
        public string Type { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

存储库类:

public class VGDBRepository
    {
        private readonly VGDB _vgdb; …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework code-first

3
推荐指数
1
解决办法
2万
查看次数