fhi*_*hin 5 sqlite win-universal-app entity-framework-core
我目前正在尝试重新创建示例,在文档http://ef.readthedocs.org/en/latest/getting-started/uwp.html中完成,使用EF7和SQLite创建通用Windows平台应用程序.
我已经安装了所需的EF7和EF7 Commands包,并创建了模型和上下文:
public class BloggingContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
string dirPath = ApplicationData.Current.LocalFolder.Path;
string connectionString = "Filename=" + Path.Combine(dirPath, "blogging.db");
optionsBuilder.UseSqlite(connectionString);
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
}
}
public class Blog
{
public int BlogId { get; set; }
public string Url { get; set; }
public List<Post> Posts { get; set; }
}
public class Post
{
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public int BlogId { get; set; }
public Blog Blog { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我现在的问题是,在构建解决方案之后,应该支持迁移以为我的模型创建初始表集的命令失败,但出现以下异常:
PM> Add-Migration MyFirstMigration
System.Reflection.ReflectionTypeLoadException: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.
at System.Reflection.RuntimeModule.GetTypes(RuntimeModule module)
at System.Reflection.RuntimeAssembly.get_DefinedTypes()
at Microsoft.Data.Entity.Design.Internal.StartupInvoker..ctor(String startupAssemblyName, String environment)
at Microsoft.Data.Entity.Design.DbContextOperations..ctor(ILoggerProvider loggerProvider, String assemblyName, String startupAssemblyName, String environment)
at Microsoft.Data.Entity.Design.MigrationsOperations..ctor(ILoggerProvider loggerProvider, String assemblyName, String startupAssemblyName, String environment, String projectDir, String rootNamespace)
at Microsoft.Data.Entity.Design.OperationExecutor.<>c__DisplayClass3_0.<.ctor>b__3()
at Microsoft.Data.Entity.Internal.LazyRef`1.get_Value()
at Microsoft.Data.Entity.Design.OperationExecutor.<AddMigrationImpl>d__7.MoveNext()
at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
at Microsoft.Data.Entity.Design.OperationExecutor.OperationBase.<>c__DisplayClass4_0`1.<Execute>b__0()
at Microsoft.Data.Entity.Design.OperationExecutor.OperationBase.Execute(Action action)
Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.
Run Code Online (Sandbox Code Playgroud)
有没有人有这个问题的解决方案?提前致谢
就我而言,问题的解决方案是在应用程序启动之前通过 app.xaml 中的代码创建数据库和表。
using (var db = new BloggingContext())
{
db.Database.EnsureCreated();
db.Database.Migrate();
}
Run Code Online (Sandbox Code Playgroud)
上下文+模型:
public class BloggingContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
string path = ApplicationData.Current.LocalFolder.Path;
if (!File.Exists(Path.Combine(path, "blogging.db")))
{
File.Create(Path.Combine(path, "blogging.db"));
}
optionsBuilder.UseSqlite("Data Source=" + Path.Combine(path, "blogging.db")+";");
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// Make Blog.Url required
modelBuilder.Entity<Blog>()
.Property(b => b.Url)
.IsRequired();
}
}
[Table("Blog")]
public class Blog
{
[Key]
public int BlogId { get; set; }
[MaxLength(100)]
public string Url { get; set; }
public List<Post> Posts { get; set; }
}
[Table("Post")]
public class Post
{
[Key]
public int PostId { get; set; }
[MaxLength(30)]
public string Title { get; set; }
[MaxLength(250)]
public string Content { get; set; }
public int BlogId { get; set; }
[ForeignKey("BlogId")]
public Blog Blog { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
此外,在访问数据库之前,我确保它已创建,例如
using (var db = new BloggingContext())
{
db.Database.EnsureCreated();
Blogs.ItemsSource = db.Blogs.ToList();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1482 次 |
| 最近记录: |