Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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# 实体框架错误地跳过数据库列_C#_Entity Framework - Fatal编程技术网

C# 实体框架错误地跳过数据库列

C# 实体框架错误地跳过数据库列,c#,entity-framework,C#,Entity Framework,解决方案: 项目中有第二个EDMX没有生成可视化图表,所以我错误地认为它没有被使用。更新此辅助EDMX允许新记录按预期运行 抱歉,如果我错误地说出下面的任何内容,C#不是我的强项 我正在更新一个在C#net中构建的旧项目。我以前在这个项目上做过以下工作,没有问题,还有一些类似的项目,都没有问题 我正在考虑向数据库中添加一个新列,然后更新EDMX以考虑新列。在本例中,列名为“ExternalURL”。列名称在EDMX中被正确识别,并且文件更新无误。类(category.cs)也成功地更新为新的“

解决方案:

项目中有第二个EDMX没有生成可视化图表,所以我错误地认为它没有被使用。更新此辅助EDMX允许新记录按预期运行


抱歉,如果我错误地说出下面的任何内容,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>