Неверное имя столбца при попытке добавить объект в базу данных с помощью DbContext - PullRequest
0 голосов
/ 29 февраля 2012

Я пытаюсь добавить объект в свою базу данных с помощью следующего кода:

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 без этого столбца.Действительно, при просмотре в базе данных «тестовой» таблицы нет Custom.MonsterBehandeling.

Однако сущность Test не содержит ни Custom, MonsterBehandeling, ни 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"/>

В схеме базы данных, которую я не использую, удаление по-прежнему приводит к той же ошибке, и

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

в файле configuration.xml.Также после удаления этого я все еще получаю ту же ошибку.

Видя, что я даже не могу найти MonsterBehandeling в базе данных или в своем решении, я понятия не имею, с чего начать поиск решения.Кроме того, я не уверен, почему я думаю, что я получаю эту ошибку правильно.Итак, что вызывает ошибку {"Invalid column name '...'."} при вставке данных, и что я могу сделать, чтобы решить эту проблему?

1 Ответ

2 голосов
/ 12 июня 2012

Я столкнулся с той же проблемой и потратил несколько часов на ее устранение.В моем случае оказывается, что EDMX-файл Entity Framework построен на основе схемы базы данных, отличной от той, с которой запускался SaveChanges ().Это звучит потенциально похоже на ваш сценарий, так как вы упомянули вторую схему.Подсказка для меня заключалась в том, что ошибка является распространенной ошибкой SQL Server (не ac # one), что указывает на плохой sql.Шаг 1 состоял в том, чтобы запустить SQL Profiler, предполагая, что вы используете SQL Server или подобный инструмент, чтобы перехватить ошибочный SQL, который был оператором INSERT с отсутствующим / удаленным столбцом.Шаг 2 состоял в том, чтобы открыть файл edmx в текстовом редакторе, чтобы затем найти ошибочный столбец.Глобальный поиск через Visual Studio, а также поиск по F3 не привели к появлению названия столбца.Как только файл edmx был построен на основе той же схемы базы данных, что и код (поэтому, когда все строки подключения были правильными и синхронизированными), все работало.Надеюсь, это поможет.

...