尝试使用DbContext将实体添加到数据库时,列名无效

时间:2012-02-28 22:05:17

标签: c# entity-framework insert add dbcontext

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

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'."}   

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

但是,实体Custom.MonsterBehandeling不包含TestCustomMonsterBehandeling。在整个解决方案中搜索Custom.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"/>

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

看到我甚至无法在数据库或我的解决方案中找到<field name="ItemExpression" value="Sample.Custom.MonsterBehandeling"/> ,我不知道从哪里开始寻找解决方案。另外,我不确定为什么我认为我得到这个错误是正确的。那么,在插入数据时导致MonsterBehandeling错误的原因是什么,我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:2)

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