我(仍然)正在尝试关注如何使用实体框架和代码优先方法的在线视频教程.我的EDM验证很好,是时候实际构建数据库了.教师使用SQL Server,显然当第一个查询命令(ToList())针对DbContext对象时,会自动创建数据库.
由于我计划在将来的应用程序中使用基于SQL Server Compact的基于文件的数据库,因此我尝试使用SQL Server Compact 4.0重现该教程的示例.我安装了NuGet包"EntityFramework.SqlServerCompact"和"Micrososft SQL Server Compact Edition".显然,这导致了一个新的提供者条目app.config:
<providers>
<provider invariantName="System.Data.SqlServerCe.4.0" type="System.Data.Entity.SqlServerCompact.SqlCeProviderServices, EntityFramework.SqlServerCompact" />
</providers>
Run Code Online (Sandbox Code Playgroud)
但是当我运行第一个查询命令时,我收到错误消息
已为上下文"DataModelContext"启用了迁移,但数据库不存在或不包含映射表.使用迁移创建数据库及其表,例如通过从程序包管理器控制台运行"Update-Database"命令.
当我跑步时,Update-Database我收到消息:
没有待定的显式迁移.
应用自动迁移:201310311356014_AutomaticMigration.
运行种子方法.
并且没有创建数据库,至少程序仍然退出上面的错误消息.
EF不会自动创建SQL Server CE数据库吗?如果是这样,我如何将手动创建的数据库与我的应用程序连接?
我有一个ComboBox,里面装满了两种不同类型的混合物品.类型是
KeyValuePair<Int32, FontFamily>
Run Code Online (Sandbox Code Playgroud)
要么
KeyValuePair<Int32, String>
Run Code Online (Sandbox Code Playgroud)
现在有些时候我只对所选项目的Key感兴趣,它始终是Int32.
访问所选项目的密钥最简单的方法是什么?我在想类似的东西
Int32 key = ((KeyValuepair<Int32, object/T/var/IdontCare>)combobox.SelectedItem).Key;
Run Code Online (Sandbox Code Playgroud)
但那不起作用.
所以我只有
Int32 key;
if(combobox.SelectedItem.GetType().Equals(typeof(KeyValuePair<Int32, FontFamily)))
{
key = ((KeyValuePair<Int32, FontFamily)combobox.SelectedItem).Key;
}
else if(combobox.SelectedItem.GetType().Equals(typeof(KeyValuePair<Int32, String)))
{
key = ((KeyValuePair<Int32, String)combobox.SelectedItem).Key;
}
Run Code Online (Sandbox Code Playgroud)
哪个有效,但我想知道是否有更优雅的方式?