В ADO.Net Data Services как проверить, находится ли объект уже в контексте? - PullRequest
3 голосов
/ 23 октября 2008

У меня есть служба данных ADO.Net, которую я использую для импорта данных. Существует ряд сущностей, которые связаны с большинством сущностей. Чтобы сделать это во время импорта, я сначала создаю эти объекты, сохраняю их, а затем использую .SetLink (EntityImport, "NavigationProperty", CreatedEntity). Теперь первая проблема, с которой я столкнулся, заключалась в том, что контекст не всегда знал о CreatedEntity (это связано с тем, что каждая сущность импортировалась независимо, и с созданием контекста при создании каждого элемента - я хотел бы сохранить эту функциональность я пытаюсь избежать "просто использовать один контекст" в качестве ответа).

Итак, у меня есть .AddToCreatedEntityType (CreatedEntity), прежде чем пытаться вызвать SetLink. Это, конечно, работает в первый раз, но на втором этапе я получаю сообщение об ошибке «контекст уже отслеживает сущность».

Есть ли способ проверить, отслеживает ли контекст уже сущность (context.Contains (CreatedEntity) еще не реализовано)? Я думал о попытке поймать попытку и просто избежать ошибки, но это, кажется, создает новый CreatedEntity каждый проход. Похоже, мне нужно использовать LINQ to Data Services, чтобы каждый раз получать CreatedEntity, но это кажется неэффективным - какие-либо предложения?

Ответы [ 2 ]

5 голосов
/ 23 октября 2008

Я думаю, вы должны взглянуть на EntityState свойство вашей сущности.

Только если оно имеет значение EntityState.Detached, чем вы должны добавить его в свой контекст.

Не забудьте следующее замечание:

Это перечисление имеет атрибут Flags. атрибут, который позволяет побитовый комбинация значений его членов.

Я бы создал метод расширения:

public static class EntityObjectExtensions
{
    public static Boolean IsTracked(this EntityObject self)
    {
        return (self.EntityState & EntityState.Detached) != EntityState.Detached;
    }
}
3 голосов
/ 10 ноября 2008

При попытке проверить, отслеживал ли контекст сущность, которую я хотел обновить (или добавить), я был довольно разочарован, когда обнаружил, что context.Entites.Contains (currentItem) не работает.

Я обошел это используя:

if (context.Entities.Where(entities => entities.Entity == currentItem).Any())
{
   this.service.UpdateObject(currentItem);                    
}
...