首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cascade on delete not Cascade with EF

Cascade on delete not Cascade with EF
EN

Stack Overflow用户
提问于 2011-10-06 20:35:53
回答 3查看 2.8K关注 0票数 4

我有一个简单的sqlite数据库,有两个表。当我手动删除(使用SQLite Expert)表DataSets中的条目时,OneD中的对应条目被如期删除。当我从实体框架中删除DataSets中的条目时,它不会导致一个D中的对应条目被删除。未生成错误。

知道为什么吗?

问候

下面是数据库的定义:

代码语言:javascript
复制
CREATE TABLE [DataSets] (
  [DataSetId] INTEGER NOT NULL ON CONFLICT FAIL PRIMARY KEY AUTOINCREMENT, 
  [Description] TEXT(128));

CREATE TABLE [OneD] (
  [OneDId] INTEGER NOT NULL ON CONFLICT FAIL PRIMARY KEY ON CONFLICT ABORT AUTOINCREMENT, 
  [DataSetId] INTEGER NOT NULL ON CONFLICT FAIL UNIQUE ON CONFLICT ABORT REFERENCES [DataSets]([DataSetId]) ON DELETE CASCADE, 
  [StockSheetLength] INTEGER NOT NULL ON CONFLICT FAIL);

下面是我如何从EF中删除条目

代码语言:javascript
复制
        var dataSets = from ds in context.DataSets select ds;
        foreach (var ds in dataSets)
            context.DataSets.DeleteObject(ds);

        context.SaveChanges();
        return true;
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-06 20:49:44

来自SQLite文档:http://www.sqlite.org/foreignkeys.html

外键约束在缺省情况下是禁用的(为了向后兼容),因此必须分别为每个数据库连接单独启用。

这会是你的问题吗?我不知道您的实体框架是否默认使用以下命令打开它:

代码语言:javascript
复制
  sqlite> PRAGMA foreign_keys = ON;

编辑:再往前看,我偶然发现了这个:http://nitoprograms.blogspot.com/2010_06_01_archive.html

实体框架实际上是一个ADO.NET数据提供程序,它本身包装了一个ADO.NET数据提供程序(具体地说,就是SQLite)。通常,Entity Framework会在需要时打开数据库连接;这些自动打开的连接在Entity Framework完成时会自动关闭。由于其ADO.NET提供程序的连接池,此默认行为可以很好地与SQL Server配合使用。但是,由于SQLite连接本身存在各种“属性”,因此它不能很好地与SQLite一起工作。一个例子是"PRAGMA foreign_keys = ON",它只对该SQLite数据库连接强制使用外键。如果实体框架随意打开和关闭它的连接,那么像这样的SQLite PRAGMA就会丢失。

票数 5
EN

Stack Overflow用户

发布于 2013-12-09 19:58:04

这个问题可以通过在连接字符串中启用外键来解决:

代码语言:javascript
复制
data source=mydb.db;foreign keys=true
票数 9
EN

Stack Overflow用户

发布于 2012-04-15 03:03:13

以下是我对这个问题的解决方案:

代码语言:javascript
复制
db.Connection.StateChange += ConnectionStateChange;

void ConnectionStateChange(object sender, System.Data.StateChangeEventArgs e)
{
    if (e.CurrentState == System.Data.ConnectionState.Open) 
         db.ExecuteStoreCommand("PRAGMA foreign_keys = true;");            
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7674318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档