我试图在我的WPF应用程序中使用SQLite和Entity Framework 6。当我在项目中创建实体数据模型时,我使用绝对路径连接到* .db文件,因为相对路径由于某种原因不起作用。所以我的连接看起来像
unable to open database file
如果某些其他开发人员克隆使用此连接进行了回复,则会出现test.db
错误,因为项目中DatabaseReference myRef = database.getReference("user");
的绝对路径在他的计算机上明显不同。
如何在app.config中编写相对路径,以便实体模型可以在不改变它的情况下工作?
答案 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="c:\Users\Heckl\Documents\Dropbox\Else\visual studio\SqLiteTry\ProjectDB.db"'" 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="|DataDirectory|ProjectDB.db"'" 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} } 值。