У меня есть 2 связанных вопроса Linq to SQL. Посмотрите изображение ниже, чтобы увидеть, как выглядит моя модель.
Вопрос 1
Я пытаюсь понять, как стремиться загрузить поле User.AddedByUser
в мой класс / таблицу User
. Это поле создается из отношения в поле User.AddedByUserId
. Таблица ссылается на себя, и я пытаюсь выяснить, как заставить Linq to SQL с нетерпением загрузить свойство User.AddedByUser
, т. Е. Всякий раз, когда любая сущность User
загружается / выбирается, она также должна извлекать User.AddedByUser и User.ChangedByUser. Однако я понимаю, что это может стать рекурсивной проблемой ...
Обновление 1.1:
Я пытался использовать DataLoadOptions следующим образом:
var options = new DataLoadOptions();
options.LoadWith<User>(u => u.ChangedByUser);
options.LoadWith<User>(u => u.AddedByUser);
db = new ModelDataContext(connectionString);
db.LoadOptions = options;
Но это не работает, я получаю следующее исключение в строке 2:
System.InvalidOperationException occurred
Message="Cycles not allowed in LoadOptions LoadWith type graph."
Source="System.Data.Linq"
StackTrace:
at System.Data.Linq.DataLoadOptions.ValidateTypeGraphAcyclic()
at System.Data.Linq.DataLoadOptions.Preload(MemberInfo association)
at System.Data.Linq.DataLoadOptions.LoadWith[T](Expression`1 expression)
at i3t.KpCosting.Service.Library.Repositories.UserRepository..ctor(String connectionString) in C:\Development\KP Costing\Trunk\Code\i3t.KpCosting.Service.Library\Repositories\UserRepository.cs:line 15
InnerException:
Исключение самоочевидно - граф объектов не может быть циклическим.
Кроме того, если предположить, что в строке 2 не возникло исключение, я уверен, что в строке 3 это произойдет, поскольку они являются дублирующими ключами.
Обновление 1.2 :
Следующее также не работает (не используется в сочетании с Обновление 1.1 выше):
var query = from u in db.Users
select new User()
{
Id = u.Id,
// other fields removed for brevityy
AddedByUser = u.AddedByUser,
ChangedByUser = u.ChangedByUser,
};
return query.ToList();
Выдает следующее, не требующее пояснений исключение:
System.NotSupportedException occurred
Message="Explicit construction of entity type 'i3t.KpCosting.Shared.Model.User' in query is not allowed."
Теперь я ДЕЙСТВИТЕЛЬНО не знаю, как решить эту проблему. Пожалуйста, помогите!
Вопрос 2
В каждой другой таблице в моей БД и, следовательно, в модели Linq to SQL, у меня есть два поля: Entity.ChangedByUser
(связано с Entity.ChangedByUserId
внешним ключом / отношением) и Entity.AddedByUser
(связано с Entity.AddedByUserId
внешним ключом / отношения)
Как мне заставить Linq to SQL легко загрузить эти поля для меня? Нужно ли выполнять простое объединение в моих запросах? Или есть какой-то другой способ?
Linq to SQL активно загружается в самоссылающуюся таблицу http://img245.imageshack.us/img245/5631/linqtosql.jpg