我正在开发一个WPF应用程序,该应用程序使用Entity Framework v.6和Code First方法来构建和管理在客户端计算机本身上创建的本地数据库。
当我在客户端计算机上安装应用程序并启动它时,上下文尝试创建数据库时收到以下错误:
| DataDirectory |的扩展处理连接字符串时失败。确保| DataDirectory |设置为有效的标准路径。
在app.config
中,我设置了以下实体框架配置:
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="mssqllocaldb"/>
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"/>
</providers>
</entityFramework>
我的上下文类包含以下代码:
class EntityContext : DbContext
{
public DbSet<Car> Cars { get; set; }
public DbSet<Trip> Trips { get; set; }
public DbSet<Volunteer> Volunteers { get; set; }
public DbSet<Motivation> Motivations { get; set; }
public DbSet<PaymentType> PaymentTypes { get; set; }
public EntityContext() : base("StaccoDataBase")
{
System.Data.Entity.Database.SetInitializer(new CreateDatabaseIfNotExists<EntityContext>());
}
}
我已尝试解决将|DataDirectory|
中的App.xaml.cs
设置为以下问题:
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.SetData("DataDirectory", Directories.DBDirectory);
}
但是问题仍然存在。
如果有人能帮助我,我将非常感谢。
答案 0 :(得分:0)
一个疯狂的猜测-如果您使用以下连接字符串怎么办:
Data Source=(LocalDb)\\MSSQLLocalDB; AttachDBFilename=|DataDirectory|StaccoDataBase.mdf; integrated security=SSPI
首先,直接在连接字符串中使用|DataDirectory|
(不要通过该string.Format()
调用“注入”它),其次,将.mdf
扩展名添加到您要附加的数据库文件。
我还将这个连接字符串存储在app.config
中-不要在运行时创建它,因为构造函数在这里调用:
public EntityContext() : base("StaccoDataBase")
将尝试在您的配置文件中找到StaccoDataBase
作为连接字符串名称。
所以使用这个:
app.config :
<configuration>
.....
<connectionStrings>
<add name="StaccoDataBase"
connectionString="Data Source=(LocalDb)\\MSSQLLocalDB;AttachDBFilename=|DataDirectory|StaccoDataBase.mdf; integrated security=SSPI"
providerName="System.Data.SqlClient" />
<connectionStrings>
.....
</configuration>