c# - Cascade on delete not cascading with EF -
i have simple sqlite database 2 tables. when manually delete (using sqlite expert)an entry in table datasets, coresponding entry in oned deleted expected. when delete entry in datasets entity framework not cause coresponsing entry in 1 d deleted. there no error generated.
any idea why?
regards
here database definition:
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);
here how delete entry ef
var datasets = ds in context.datasets select ds; foreach (var ds in datasets) context.datasets.deleteobject(ds); context.savechanges(); return true;
from sqlite documentation: http://www.sqlite.org/foreignkeys.html
foreign key constraints disabled default (for backwards compatibility), must enabled separately each database connection separately.
could problem? don't know if entity framework turns on default with:
sqlite> pragma foreign_keys = on;
edit: looking bit further stumbled across this: http://nitoprograms.blogspot.com/2010_06_01_archive.html
the entity framework ado.net data provider wrapping ado.net data provider (sqlite, specific). normally, entity framework open database connection whenever needs one; these automatically-opened connections automatically closed when entity framework finished it. default behavior works sql server due ado.net provider's connection pooling. however, not work sqlite, due various "properties" existing on sqlite connection itself. 1 example "pragma foreign_keys = on", enforces foreign keys sqlite database connection. if entity framework opens , closes connections @ will, sqlite pragmas such these lost.
Comments
Post a Comment