【问题标题】:Invalid column name when trying to add an entity to a database using DbContext尝试使用 DbContext 将实体添加到数据库时列名无效
【发布时间】:2012-02-28 22:05:17
【问题描述】:

我正在尝试使用以下代码将实体添加到我的数据库中:

public void StoreElectronicSignatureType(ElectronicSignatureTypeModel model)
{
    [...]
    ElectronicSignatureType electronicSignatureType = new ElectronicSignatureType();

    Entity entity =  GetEntity("Test");
    electronicSignatureType.Entity = entity;

    Add(electronicSignatureType);

public void Add(object entity)
{
   DbContext.Entry(entity).State = System.Data.EntityState.Added;
   //DbContext.Set(entity.GetType()).Add (entity);
   DbContext.SaveChanges();
}

当我这样做时,我收到以下错误:

{"Invalid column name 'Custom.MonsterBehandeling'."}   

我能找到的这个错误的例子都是关于尝试从他们尝试选择的列不存在的数据库中选择数据,所以我认为我正在尝试插入列Custom.MonsterBehandeling没有该列。事实上,在数据库中查看“Test”表并没有 Custom.MonsterBehandeling。

但是,实体Test 不包含CustomMonsterBehandelingCustom.MonsterBehandeling。在整个解决方案中搜索MonsterBehandeling 只会得到两次点击:

<CustomTable Name="Sample">
   <Columns>
 <ColumnDefinition IsUnique="false" IsDiscriminator="false" IsIdentity="false" Description="Monster behandeling" Size="0" Precision="0" Scale="0" DataType="Text" Name="MonsterBehandeling" IsPrimaryKey="false" AllowNull="true" />
    </Columns>
</CustomTable>    <field name="ItemExpression" value="Sample.Custom.MonsterBehandeling"/>

在我没有使用的数据库架构中,删除它仍然会出现相同的错误,并且

<field name="ItemExpression" value="Sample.Custom.MonsterBehandeling"/>

在 configuration.xml 文件中。同样在删除它之后,我仍然得到同样的错误。

看到我什至在数据库或我的解决方案中都找不到MonsterBehandeling,我不知道从哪里开始寻找解决方案。另外,我不确定为什么我认为我得到这个错误是正确的。那么,插入数据时出现{"Invalid column name '...'."}错误的原因是什么,我该如何解决呢?

【问题讨论】:

  • 您使用的是模型优先、数据库优先还是代码优先?
  • 我首先使用数据库

标签: c# entity-framework insert add dbcontext


【解决方案1】:

我遇到了同样的问题,花了几个小时修复它。事实证明,在我的案例中,Entity Framework edmx 文件是针对与运行 SaveChanges() 的数据库架构不同的数据库架构构建的。这听起来可能与您的场景相似,因为您提到了第二个模式。 给我的线索是该错误是一个常见的 SQL Server 错误(不是 c# 错误),表明 sql 错误。 第 1 步是运行 SQL Profiler,假设您正在使用 SQL Server 或类似工具来捕获有问题的 SQL,这是一个带有缺失/删除​​列的 INSERT 语句。 第 2 步是在文本编辑器中打开 edmx 文件,然后找到有问题的列。通过 Visual Studio 进行的全局搜索以及 F3 搜索没有找到该列的名称。 一旦 edmx 文件是针对与代码相同的数据库模式构建的(所以一旦我的所有连接字符串都正确且同步),一切正常。希望这会有所帮助。

【讨论】:

  • 为我节省了很多时间。奇怪的是字段可以出现在edmx的XML中而不出现在图表上。
猜你喜欢
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 2012-11-02
  • 1970-01-01
  • 1970-01-01
  • 2022-01-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多