C# WPF/EF代码创建的第一个mdf文件无法使用工具访问
我使用CustomConnectionFactory和PromptForDropCreateDatabase创建了一个MDF文件。当从“代码优先”O'Reily的书中选择“方式”时,该文件已创建,但无法从VS或SSMS访问。我能够在VS服务器资源管理器中查看通过扩展树视图创建的DB表和参数,但在“显示数据”上显示错误:“找不到指定的模块。(HRESULT异常:0x8007007E)”。我查找了这个错误,似乎服务器权限有问题,但是将SSM设置为最高权限(sysadmin、owner等)没有帮助。我认为文件本身可能存在权限问题。提前感谢您的帮助 代码如下: App.xaml.cs:C# WPF/EF代码创建的第一个mdf文件无法使用工具访问,c#,wpf,entity-framework,ef-code-first,C#,Wpf,Entity Framework,Ef Code First,我使用CustomConnectionFactory和PromptForDropCreateDatabase创建了一个MDF文件。当从“代码优先”O'Reily的书中选择“方式”时,该文件已创建,但无法从VS或SSMS访问。我能够在VS服务器资源管理器中查看通过扩展树视图创建的DB表和参数,但在“显示数据”上显示错误:“找不到指定的模块。(HRESULT异常:0x8007007E)”。我查找了这个错误,似乎服务器权限有问题,但是将SSM设置为最高权限(sysadmin、owner等)没有帮助。我
protected override void OnStartup(StartupEventArgs e)
{
AppDomain.CurrentDomain.SetData("DataDirectory", Path.Combine(AppDomain.CurrentDomain.BaseDirectory, ""));
Database.DefaultConnectionFactory = new CustomConnectionFactory();
Database.SetInitializer(new PromptForDropCreateDatabaseWhenModelChages<AppEntities>());
using (var context = new AppEntities())
{
context.Clicks.Add(new MouseClick
{
DateTimeCreated = DateTime.Now,
DateTimeModified = DateTime.Now,
Id = 1,
IsActive = true,
});
}
var mainView = new MainView
{
DataContext = new ViewModelMain(new AppEntities())
};
mainView.Show();
}
PromptForDropCreateDatabaseWhenModelChanges.cs:
public class PromptForDropCreateDatabaseWhenModelChages<TContext> : IDatabaseInitializer<TContext> where TContext : DbContext
{
public void InitializeDatabase(TContext context)
{
var exists = context.Database.Exists();
if (exists && context.Database.CompatibleWithModel(true))
{
return;
}
if (exists && context.Database.CompatibleWithModel(false))
{
context.Database.Delete();
}
context.Database.Create();
}
}
公共类PromptForDropCreateDatabaseWhenModelChages:IDatabaseInitializer,其中TContext:DbContext
{
public void InitializeDatabase(TContext上下文)
{
var exists=context.Database.exists();
if(exists&&context.Database.CompatibleWithModel(true))
{
返回;
}
if(exists&&context.Database.CompatibleWithModel(false))
{
context.Database.Delete();
}
context.Database.Create();
}
}
在家用电脑上重新创建后,一切正常。似乎工作中有一些网络限制
public class PromptForDropCreateDatabaseWhenModelChages<TContext> : IDatabaseInitializer<TContext> where TContext : DbContext
{
public void InitializeDatabase(TContext context)
{
var exists = context.Database.Exists();
if (exists && context.Database.CompatibleWithModel(true))
{
return;
}
if (exists && context.Database.CompatibleWithModel(false))
{
context.Database.Delete();
}
context.Database.Create();
}
}