Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带有EF CodeFirst的WPF MVVM_C#_Sql Server 2008_Entity Framework - Fatal编程技术网

C# 带有EF CodeFirst的WPF MVVM

C# 带有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

运行我的WPF应用程序时未创建数据库。我的代码有什么问题:

App.config

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