SQL ile ilgili 2 ilgili Linq var. Modelimin neye benzediğini görmek için lütfen aşağıdaki resme bakın.Kendi kendine başvuru tablosundaki SQL varlıklarına Linq yüklemesi
Soru 1
ben anlamaya çalışıyorum nasıl istekli benim User
sınıf/masaya yük User.AddedByUser
alanını. Bu alan, User.AddedByUserId
alanındaki ilişkiden oluşturulur. Tablo kendi kendini referanslama, veözelliği hevesle yüklemek için Linq SQL almak nasıl anlamaya çalışıyorum, yani User
varlık yüklü/getirildiğinde, aynı zamanda User.AddedByUser ve User.ChangedByUser getirmeniz gerekir . Ancak, bu bir özyinelemeli sorun haline gelebilir anlıyoruz ...
Güncelleme 1.1:
var options = new DataLoadOptions();
options.LoadWith<User>(u => u.ChangedByUser);
options.LoadWith<User>(u => u.AddedByUser);
db = new ModelDataContext(connectionString);
db.LoadOptions = options;
Ama bu değil: Ben şöyle DataLoadOptions kullanmayı denedik
nesne grafiği izin verilmez -
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:
istisna oldukça kendini açıklıyor: iş, ben Hat 2 aşağıdaki istisna almak Döngüsel olmak. Ayrıca, Satır 2'nin bir istisna atmadığını varsayarak, Satır 3'ün yinelenen anahtarlar olduğundan eminim.
Güncelleştirme 1.2:
, takibeden (güncelleştirme 1.1 Yukarıdaki ile paralel olarak kullanılmaz) çalışmaz:
Aşağıdaki, kendini açıklayan durum atarvar 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."
Şimdi bunu nasıl çözeceğime dair bir kayıpta GERÇEKTİR. Lütfen yardım et!
benim DB her masada Soru 2
, ve SQL modeline dolayısıyla Linq, ben iki alan, Entity.ChangedByUser
ve Entity.AddedByUser
(Entity.ChangedByUserId
yabancı anahtar/ilişki bağlantılı) (Entity.AddedByUserId
yabancı anahtara bağlı olması/ilişki)
Bu alanları benim için yüklemek için Linq'i SQL'e nasıl alabilirim? Sorularıma basit bir katılım mı yapmalıyım yoksa başka bir yol var mı?
Evet Bu bilgiyi GUI'mde görüntülemek istiyorum. Bu sorunu anonim tipler kullanmadan çözmeyi umuyordum. Ama sanırım problemi çözmenin tek yoludur. Sorunum, Linq'in SQL'e birçok ilişkiyle başa çıkamamasıyla ilgili mı? –
Na, User sınıfına User.AddedDescription ve User.ChangedDescription alanları ekleyebilir ve sonra bir anon türünü kullanmak zorunda kalmazsınız. Gerçekten çok fazla ilişki ile ilgisi yoktur (örneğinizdeki her ilişki 1: 1'dir). SQL'inizi doğrudan yazıyorsanız, AddedByUser öğesinin tüm özelliklerini (onun AddedByUser'i de dahil olmak üzere) almak istemezsiniz. Muhtemelen ismini ve/veya senin bakış açınız için gereken her türlü bilgiyi almalısın. Imo daha genel bir O/RM problemidir. L2E veya Hazırda Bekletme ile aynı sorunu yaşayacağınızı düşünüyorum. –