Почему EF заполняет нулевыми значениями объект, который не существует в базе данных? - PullRequest
3 голосов
/ 26 февраля 2012

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

Почему это происходит? Есть ли способ избежать этого паттерна?

Пример:

public class Entity{
    public Int32 ID {get;set;}

    public Relationship relationship {get;set;}
}

public class Relationship{
    public Int32 ID {get;set;}

    public Int32 property {get;set;}
}  

Если я попытаюсь, не имея отношения внутри базы данных:

Entity entity = context.entities.Include("relationship").SingleOrDefault( e => e.ID == id);

Я могу получить доступ к entity.relationship, не вызывая исключение NullReferenceException, но свойство "property" имеет значение null.

Спасибо

Игорь

1 Ответ

0 голосов
/ 26 февраля 2012

Проблема в том, что вы на самом деле не показываете всю историю. Чтобы иметь свойство навигации Relationship, должен существовать идентификатор, который определяет эту связь. Итак, ваш класс должен выглядеть примерно так:

public class Entity{ 
    public Int32 ID {get;set;} 

    public Int32? RelationshipID {get; set;}
    public Relationship relationship {get;set;} 
} 

Если RelationshipID не равен NULL, то создается объект Relationship. Если значение RelationshipID не соответствует фактическому элементу данных, это является ошибкой и должно вызвать исключение.

Если RelationshipID равен нулю, то и отношение будет нулевым.

Исключением является случай, когда это значение равно 1 ко многим, в этом случае это будет ICollection, и отношение не будет нулевым, но это будет пустая коллекция, и не будет никакого RelationshipID (идентификатор будет удерживаться в соответствующем пункте).

Нельзя иметь отношения без какого-то ключа.

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