2013-11-15 74 views
1

数据库在运行我的WPF应用程序时未创建。这有什么错我的代码:使用EF CodeFirst的WPF MVVM

enter image description here

的App.config

<connectionStrings> 
    <add name="JanathaPOSConn" 
    connectionString="Server=.\SQLEXPRESS;Database=JanathaDb;Trusted_Connection=true" 
    providerName="System.Data.SqlClient" /> 
    </connectionStrings> 

POCO类1:

namespace JanathaPOS.Model 
{ 
    [Table("UserRoles")] 
    public class UserRole 
    { 
     [Key] 
     public string Id { get; set; } 
     [MaxLength(50)] 
     public string Name { get; set; } 
     [MaxLength(50)] 
     public string Description { get; set; } 
    } 
} 

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; } 

    } 
} 

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); 
     } 
    } 
} 
+0

您是收到错误或异常?它是什么?您可能不希望在应用程序的生命周期中拥有单一的上下文。 – Steve

+0

获取没有错误,没有例外,但没有创建数据库。 – Jobi

+0

对不起!我是WPF的初学者。你能解释一下吗? – Jobi

回答

1

我看不出这里实例化的背景下。你必须创建上下文,并试图访问数据强制初始化:

using (var ctx = new JanathaPosDbContext()) 
{ 
    // access the data 
    var roles = ctx.UserRoles.ToList();   

    // or force the initialization 
    ctx.Database.Initialize(true); 
} 
+0

现在它正在工作......谢谢 – Jobi