UpdateException: операция недопустима из-за текущего состояния объекта при использовании Entity Framework и Oracle - PullRequest
2 голосов
/ 04 января 2012

Я пытаюсь добавить новый объект Entity для сохранения, однако я получаю UpdateException , внутренним исключением которого является InvalidOperationException с сообщением:

Операция недопустима из-за текущего состояния объекта.

Объект, который создается:

var something = new SITE
{
    EntityKey = new EntityKey("DataModelContainer.SITE", "SITE_ID", "ID"),
                    SITE_COMMON_REFERENCE = "hello",
                    SITE_ID = "hello"     
};

, который затем передается:

public void ExportSiteData (SITE exportSiteData)
{
    _context.SITE.AddObject(exportSiteData);
    _context.SaveChanges(); //<-- Exception here
}

База данных - Oracle 11g, и я могу успешно извлекать данные через Entity Framework.

Я предполагаю, что проблема связана с базой данных, однако я могу успешно заполнить ее обоими значениями "привет" без проблем с ключом / ссылочной целостностью.

Я был бы очень признателен за указание в правильном направлении. Спасибо

Дополнительный код:

ExportSiteData находится в пределах BillRepository, который реализует IDisposable:

class BillRepository : IDisposable
{
    private readonly DataModelContainer _context;        

    public BillRepository()
    {
        _context = new DataModelContainer();
    }

    public void ExportSiteData (SITE exportSiteData)
    {
        _context.SITE.AddObject(exportSiteData);
        _context.SaveChanges(); //<-- Exception here
    }

    public void Dispose()
    {
        if (_context != null) 
        { 
            _context.Dispose(); 
        } 
    }
}

и называется так:

using (var repo = new BillRepository())
{
    repo.ExportSiteData(something);
}

Ответы [ 3 ]

2 голосов
/ 10 января 2012

Убедитесь, что первичный ключ (откройте файл .edmx в формате xml) для рассматриваемой таблицы имеет StoreGeneratedPattern = "Identity" в обоих разделах. Существует известная ошибка, когда EF через конструктор изменяет один раздел, но не изменяет другой раздел. Ищите это в обоих разделах:

<EntityType Name="TIMELINE">
          <Key>
            <PropertyRef Name="ID"/>
          </Key>

  <Property Name="ID" Type="decimal" Nullable="false" Precision="19" StoreGeneratedPattern="Identity" />

См.

0 голосов
/ 04 мая 2015

Я сталкивался с этой ошибкой при попытке обновить старый проект.

Убедитесь, что ваш проект соответствует версии .net framework, указанной в файле пакета.Например, если у вас есть net452 в списке, убедитесь, что ваш проект настроен на использование net 4.5.2.Если в вашем решении более одного проекта, убедитесь, что все они настроены на правильную версию .net framework.

Кроме того, я заметил, что при добавлении новой модели данных в проект это может привести к путаницев какой файл модели добавить.Я полагаю, что это произошло из-за TFS, установленной на моем компьютере разработчика (у меня был экспресс, а затем установить последнюю версию).Чтобы решить эту проблему, я пока отключил проект от TFS).

0 голосов
/ 10 января 2012

У меня была та же проблема за последние пару дней, и она также имела отношение к первичным ключам.

В моем случае исходная база данных для модели не имела первичных ключей (по любой причине).

При создании модели из этих таблиц файл .ssdl выглядел следующим образом:

<EntitySet Name="..." EntityType="Model.Store...." store:Type="Tables"     store:Schema="..." store:Name="...">
 <DefiningQuery>
 SELECT
 "..."."..." AS "...",
 ...
 </DefiningQuery>
</EntitySet>

"store: Name" и "DefiningQuery« не было сгенерировано, когда у таблицы уже был первичный ключ.

После удаления этих двух частей мои ранее созданные .ssdl-файлы работали, даже с таблицами, у которых еще не было первичных ключей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...