C# 实体框架错误地跳过数据库列
解决方案: 项目中有第二个EDMX没有生成可视化图表,所以我错误地认为它没有被使用。更新此辅助EDMX允许新记录按预期运行C# 实体框架错误地跳过数据库列,c#,entity-framework,C#,Entity Framework,解决方案: 项目中有第二个EDMX没有生成可视化图表,所以我错误地认为它没有被使用。更新此辅助EDMX允许新记录按预期运行 抱歉,如果我错误地说出下面的任何内容,C#不是我的强项 我正在更新一个在C#net中构建的旧项目。我以前在这个项目上做过以下工作,没有问题,还有一些类似的项目,都没有问题 我正在考虑向数据库中添加一个新列,然后更新EDMX以考虑新列。在本例中,列名为“ExternalURL”。列名称在EDMX中被正确识别,并且文件更新无误。类(category.cs)也成功地更新为新的“
抱歉,如果我错误地说出下面的任何内容,C#不是我的强项 我正在更新一个在C#net中构建的旧项目。我以前在这个项目上做过以下工作,没有问题,还有一些类似的项目,都没有问题 我正在考虑向数据库中添加一个新列,然后更新EDMX以考虑新列。在本例中,列名为“ExternalURL”。列名称在EDMX中被正确识别,并且文件更新无误。类(category.cs)也成功地更新为新的“ExternalURL”属性 最后跳转到代码中,调用category.ExternalURL返回一个有错误的值,但它总是返回null。我尝试在DB中手动设置一些值,但它仍然返回null。尝试在代码中保存值并将其保存到数据库将返回成功,并且该属性将附加到对象,但从未写入数据库。编辑任何其他属性都可以,例如,category.name可以很好地更新 我做了进一步的挖掘,找到了一种查看实体框架正在生成的SQL语句的方法,它似乎完全缺少insert/select语句中的新列。这里有一个例子
SELECT
[Extent1].[CategoryID] AS [CategoryID],
[Extent1].[Name] AS [Name],
[Extent1].[Position] AS [Position],
[Extent1].[CreatedOn] AS [CreatedOn],
[Extent1].[ModifiedOn] AS [ModifiedOn]
FROM [dbo].[Category] AS [Extent1]
ORDER BY [Extent1].[Position] ASC
这里还有一张数据库记录的图片
此外,下面是一个如何返回记录的示例。
最后是EDMX。
在谷歌搜索的第三天,有点不知所措,可以接受所有建议。如果需要更多细节,请告诉我
谢谢
编辑:
处理select的代码
List<Category> items = Global.DbContext.Categories.OrderBy(x => x.Position).ToList();
grdData.DataSource = items;
grdData.DataBind();
编辑2:
EDMX中有3次“ExternalURL”
<EntityType Name="Category">
<Key>
<PropertyRef Name="CategoryID" />
</Key>
<Property Name="CategoryID" Type="int" StoreGeneratedPattern="Identity" Nullable="false" />
<Property Name="Name" Type="varchar" MaxLength="50" Nullable="false" />
<Property Name="Position" Type="int" Nullable="false" />
<Property Name="CreatedOn" Type="datetime" Nullable="false" />
<Property Name="ModifiedOn" Type="datetime" Nullable="false" />
<Property Name="ExternalURL" Type="varchar" MaxLength="255" Nullable="false" />
</EntityType>
我以前遇到过一些类似的情况。我的实体框架数据在一个库中(带有一个特定的连接字符串),我的测试应用程序有时有一个不同的库。您是否指向同一个数据库?我会先检查一下。如果他指向另一个没有该列的表,EF会抛出一个错误,因为当他执行CRUD操作时,该列不存在。表也会读取。错误抛出类似“列…未找到或不存在”的内容。您是正确的,我刚刚对我的列运行了一个测试,它抛出了所述错误。我已经更新了我的答案。谢谢!他们是相同的数据库,我已经检查了这一点,因为我的项目是以类似的方式设置的。我已经确认它是同一个数据库,因为我可以更新名称(同时更新externalURL),并且名称列更新没有问题。请向我们展示您的代码和ssms内部设计模式下的表结构。在插入/更新时也可以尝试使用sql探查器,并检查生成的sql。我猜,“bin”文件夹中的dll可能是旧版本。这听起来可能很傻,但很多时候,这是可能的。所以,我会手动删除所有bin和obj文件夹,然后试一试。另外,你能把C#代码发到你试图检索的地方吗。@sam我也看过了,网站目录中的bin文件和你提到的文件夹都在更新中。你看过edmx中的映射代码了吗?代码是否已正确生成?你能分享一些代码吗?@sam那会很有意义的。
<EntityType Name="Category">
<Key>
<PropertyRef Name="CategoryID" />
</Key>
<Property Name="CategoryID" Type="int" StoreGeneratedPattern="Identity" Nullable="false" />
<Property Name="Name" Type="varchar" MaxLength="50" Nullable="false" />
<Property Name="Position" Type="int" Nullable="false" />
<Property Name="CreatedOn" Type="datetime" Nullable="false" />
<Property Name="ModifiedOn" Type="datetime" Nullable="false" />
<Property Name="ExternalURL" Type="varchar" MaxLength="255" Nullable="false" />
</EntityType>
<EntityType Name="Category">
<Key>
<PropertyRef Name="CategoryID" />
</Key>
<Property Name="CategoryID" Type="Int32" Nullable="false" annotation:StoreGeneratedPattern="Identity" />
<Property Name="Name" Type="String" MaxLength="50" Unicode="false" Nullable="false" FixedLength="false" />
<Property Name="Position" Type="Int32" Nullable="false" />
<Property Name="CreatedOn" Type="DateTime" Nullable="false" Precision="3" />
<Property Name="ModifiedOn" Type="DateTime" Nullable="false" Precision="3" />
<NavigationProperty Name="SubCategories" Relationship="Self.FK_SubCategory_Category" FromRole="Category" ToRole="SubCategory" />
<Property Name="ExternalURL" Type="String" Nullable="false" MaxLength="255" FixedLength="false" Unicode="false" />
</EntityType>
<EntitySetMapping Name="Categories">
<EntityTypeMapping TypeName="IsTypeOf(FileSuppliesModel.Category)">
<MappingFragment StoreEntitySet="Category">
<ScalarProperty Name="ExternalURL" ColumnName="ExternalURL" />
<ScalarProperty Name="ModifiedOn" ColumnName="ModifiedOn" />
<ScalarProperty Name="CreatedOn" ColumnName="CreatedOn" />
<ScalarProperty Name="Position" ColumnName="Position" />
<ScalarProperty Name="Name" ColumnName="Name" />
<ScalarProperty Name="CategoryID" ColumnName="CategoryID" />
</MappingFragment>
</EntityTypeMapping>
</EntitySetMapping>