我正在使用EntityFramework 6.1.3,基于数据库的方法。 我现在希望我之前选择了代码优先...
我有一些表格的数据库。我以前建立了我的edmx
。然后,我更改了一些列的类型并添加了一些列。例如,将一个bit
列更改为一个int
列。
我尝试使用右键单击->从数据库更新模型
从数据库更新我的模型。
无论我做什么,EF似乎始终只会选择我创建edmx时的数据库状态。 我尝试过的事情:
- 重新打开Visual Studio
- 重建项目
- 删除并重新添加实体(这是大多数人应该有效的方法)
- 在关闭Visual Studio的情况下,在整个项目中搜索xml或C#的文本引用到我的列,并替换它们。(这起初似乎有效,但如果我再次尝试从数据库更新,则会覆盖它们)
- 重新启动SQL服务
- 重新启动机器
- 对所有.tt文件运行“Run Custom Tool”(不应该有区别,但是怎么样呢)
当我右键单击实体并选择“表映射”时,它总是显示旧的bit
列在左侧。
这是我的数据库表设计:
值得注意的是,实体正在运行一个视图,而不是直接从表中获取。 但是,正如我所调查的问题一样,该视图只是选择*表,并且我已通过PowerShell确认视图返回的类型为int:
PS> $conn = new-object data.sqlclient.SqlConnection("data source=localhost;initial catalog=dbname;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework")
PS> $conn.open()
PS> $query = $conn.createcommand()
PS> $query.commandtext = "select * from [dbname].[LocalCustom].[viewname]"
PS> $reader = $query.executereader()
PS> $reader.getschematable().rows[19]
ColumnName : ActiveMember
ColumnOrdinal : 19
ColumnSize : 4
NumericPrecision : 10
NumericScale : 255
IsUnique : False
IsKey :
BaseServerName :
BaseCatalogName :
BaseColumnName : ActiveMember
BaseSchemaName :
BaseTableName :
DataType : System.Int32
AllowDBNull : False
ProviderType : 8
IsAliased :
IsExpression :
IsIdentity : False
IsAutoIncrement : False
IsRowVersion : False
IsHidden :
IsLong : False
IsReadOnly : False
ProviderSpecificDataType : System.Data.SqlTypes.SqlInt32
DataTypeName : int
XmlSchemaCollectionDatabase :
XmlSchemaCollectionOwningSchema :
XmlSchemaCollectionName :
UdtAssemblyQualifiedName :
NonVersionedProviderType : 8
IsColumnSet : False
我现在的主要问题是... EF怎么知道它曾经是一个bit
类型?它把这些数据存储在哪里? 当然,我也想知道如何在UI中正确更新模型,而不必删除和重新添加实体或者其他需要做的事情以进行更新。
我对EF感到相当沮丧 :(
edmx
并创建一个新的。您最终可以手动修改CSDL
\SSDL
。 - Amit Kumar Ghosh