C# 带有EF CodeFirst的WPF MVVM
运行我的WPF应用程序时未创建数据库。我的代码有什么问题: App.configC# 带有EF CodeFirst的WPF MVVM,c#,sql-server-2008,entity-framework,C#,Sql Server 2008,Entity Framework,运行我的WPF应用程序时未创建数据库。我的代码有什么问题: App.config <connectionStrings> <add name="JanathaPOSConn" connectionString="Server=.\SQLEXPRESS;Database=JanathaDb;Trusted_Connection=true" providerName="System.Data.SqlClient" /> </conn
<connectionStrings>
<add name="JanathaPOSConn"
connectionString="Server=.\SQLEXPRESS;Database=JanathaDb;Trusted_Connection=true"
providerName="System.Data.SqlClient" />
</connectionStrings>
POCO 2级:
namespace JanathaPOS.Model
{
[Table("Users")]
public class User
{
[Key]
public string Id { get; set; }
[MaxLength(50)]
public string Name { get; set; }
}
}
上下文类:
namespace JanathaPOS.Model
{
/// <summary>
///
/// </summary>
class JanathaPosDbContext : DbContext
{
private static JanathaPosDbContext _context;
/// <summary>
///
/// </summary>
/// <returns></returns>
public static JanathaPosDbContext GetContext()
{
if (_context == null)
{
_context = new JanathaPosDbContext();
}
return _context;
}
/// <summary>
///
/// </summary>
public JanathaPosDbContext() : base("JanathaPOSConn") { }
/// <summary>
///
/// </summary>
/// <param name="modelBuilder"></param>
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<UserRole>();
modelBuilder.Entity<User>();
base.OnModelCreating(modelBuilder);
}
public DbSet<UserRole> UserRoles { get; set; }
public DbSet<User> Users { get; set; }
}
}
名称空间JanathaPOS.Model
{
///
///
///
类JanathaPosDbContext:DbContext
{
私有静态JanathaPosDbContext\u上下文;
///
///
///
///
公共静态JanathaPosDbContext GetContext()
{
if(_context==null)
{
_context=new JanathaPosDbContext();
}
返回上下文;
}
///
///
///
public JanathaPosDbContext():base(“JanathaPOSConn”){}
///
///
///
///
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity();
modelBuilder.Entity();
基于模型创建(modelBuilder);
}
公共数据库集用户角色{get;set;}
公共数据库集用户{get;set;}
}
}
XAML:
namespace JanathaPOS
{
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<JanathaPosDbContext>());
base.OnStartup(e);
}
}
}
名称空间JanathaPOS
{
///
///App.xaml的交互逻辑
///
公共部分类应用程序:应用程序
{
启动时受保护的覆盖无效(StartupEventArgs e)
{
SetInitializer(新的DropCreateDatabaseIfModelChanges());
基础。启动时(e);
}
}
}
我看不到这里实例化的上下文。您必须创建上下文并尝试访问数据或强制初始化:
using ( var ctx = new JanathaPosDbContext() )
{
// access the data
var roles = ctx.UserRoles.ToList();
// or force the initialization
ctx.Database.Initialize( true );
}
您是否收到错误或异常?这是怎么一回事?您可能也不希望在应用程序的生命周期中使用单一上下文。不会出现错误,也不会出现异常,但不会创建数据库。抱歉!我是WPF的初学者。你能再解释一下吗?这和WPF没有任何关系。EF是完全正交的。尝试事项:1)在自己的项目中创建上下文和模型。2) 创建一个非常简单的控制台应用程序,它只实例化上下文,并且可能添加一个新实体或执行查询。我认为(但我不确定)直到第一次查询或插入时才真正创建数据库。把问题简化,就更容易解决了。
using ( var ctx = new JanathaPosDbContext() )
{
// access the data
var roles = ctx.UserRoles.ToList();
// or force the initialization
ctx.Database.Initialize( true );
}