2012-07-26 39 views
4

我使用實體框架的工作和休耕是我,每當這就是所謂的創建背景的方法,我已經啓用外鍵但我驚訝的是變量的值,始終爲0SQLite的外鍵是沒有得到激活

private static DataBaseEntity CreateContext() 
{ 
    var context = new DataBaseEntity("name=DataBaseEntity"); 
    context.ExecuteStoreCommand("PRAGMA foreign_keys = ON"); 

    var value = context.ExecuteStoreCommand("PRAGMA foreign_keys"); 
    return context; 
} 

我想有刪除功能級聯,但我無法得到它的外鍵約束不獲取設置

我使用的SQLite 3.6.23.1與ado.net提供商

回答

8

車削外鍵僅在d的生命週期內工作數據庫連接。默認情況下,只要通過調用SaveChanges()ExecuteStoreCommand()或其他方式與數據庫進行交互,ObjectContext將打開一個連接並將其關閉。如果您不想要這種行爲,那麼您必須手動打開連接,並且在完成ObjectContext對象時理想地關閉它。

我自己我更喜歡打開連接字符串中的外鍵,這樣我就不必擔心上述任何一種情況。

例如,在你的app.config文件,你會有這樣的事情(查找foreign keys=TrueconnectionString屬性的末尾):

<configuration> 
    <connectionStrings> 
    <add name="DataBaseEntity" 
     connectionString="metadata=res://*/m.csdl|res://*/m.ssdl|res://*/m.msl;provider=System.Data.SQLite;provider connection string=&quot;data source=C:\foo.db;foreign keys=True&quot;" 
     providerName="System.Data.EntityClient" /> 
    </connectionStrings> 
</configuration> 

我想這應該與你的ADO .NET提供工作,但我無法承諾。如果您升級到latest version available on SQLite's website,則會增加您可以正常工作的機率。