SQLite with Entity Framework 6:相对路径?

时间:2017-11-06 09:54:24

标签: visual-studio entity-framework sqlite

我试图在我的WPF应用程序中使用SQLite和Entity Framework 6。当我在项目中创建实体数据模型时,我使用绝对路径连接到* .db文件,因为相对路径由于某种原因不起作用。所以我的连接看起来像

unable to open database file

如果某些其他开发人员克隆使用此连接进行了回复,则会出现test.db错误,因为项目中DatabaseReference myRef = database.getReference("user"); 的绝对路径在他的计算机上明显不同。 如何在app.config中编写相对路径,以便实体模型可以在不改变它的情况下工作?

2 个答案:

答案 0 :(得分:0)

使用DB文件的相对路径

db文件的源代码在App.config

<add name="ProjectDBEntities" connectionString="metadata=res://*/ProjectDBModel.csdl|res://*/ProjectDBModel.ssdl|res://*/ProjectDBModel.msl;provider=System.Data.SQLite.EF6;provider connection string='data source=&quot;c:\Users\Heckl\Documents\Dropbox\Else\visual studio\SqLiteTry\ProjectDB.db&quot;'" providerName="System.Data.EntityClient"/>

数据源必须是绝对的

您可以使用| DataDirectory | App.config中的替换字符串

<add name="ProjectDBEntities" connectionString="metadata=res://*/ProjectDBModel.csdl|res://*/ProjectDBModel.ssdl|res://*/ProjectDBModel.msl;provider=System.Data.SQLite.EF6;provider connection string='data source=&quot;|DataDirectory|ProjectDB.db&quot;'" providerName="System.Data.EntityClient"/>

必须设置替换字符串

string executable = System.Reflection.Assembly.GetExecutingAssembly().Location;            
string path = (System.IO.Path.GetDirectoryName(executable));
AppDomain.CurrentDomain.SetData("DataDirectory", path);  
// ...
var db = new ProjectDBEntities()

问题:

第一个LINQ命令的

异常

VS并不总是检测到App.config中的更改,您可能需要手动重建解决方案

上面的代码在解决方案\ project \ bin \ debug文件夹

中设置exe文件的位置

db文件位于解决方案文件夹

在调试期间检查监视窗口中db.Database.Connection.ConnectionString的值

您也可以将db文件复制到调试文件夹中

答案 1 :(得分:0)

|DataDirectory| 适用于生产环境,但是当您执行 update-database 迁移适用于 EF 数据包目录中新创建的数据库时,因为 EF 无法获取您的项目生成的连接字符串并使用 self {{1} } 值。