كيفية تعيين فئة كيان المجموعة من عمود "اسم المجموعة" في Nhibernate؟
-
21-09-2019 - |
سؤال
لدي طاولة في قاعدة البيانات الخاصة بي تبدو مثل هذا:
create table Foo (
Id int identity not null,
Name varchar(100) not null,
GroupName varchar(100) not null,
constraint PK_Foo primary key (Id)
)
الآن أريد تعيين هذا الجدول في فئتين كيان مثل هذا:
class Foo {
public virtual in Id { get; private set; }
public virtual string Name { get; set; }
public virtual Group Group { get; set; }
}
class FooGroup {
public virtual string Name { get; set; }
public virtual ISet<Foo> Foos { get; private set; }
}
هل هذا ممكن مع nhibernate؟ لقد حاولت البحث في مستندات NET و NH ، لكنني حقًا لا أعرف ما الذي يجب البحث عنه - سيتم تقدير الأفكار حول استفسارات البحث.
ربما يمكنني عمل رسم خرائط ل FooGroup
يستخدم استعلام HQL/SQL مخصص لتحديد أسماء المجموعات المتميزة ، واستعلام مخصص آخر لتحديد المجموعة المناسبة للعناصر الموجودة؟
المحلول
لا أعتقد أنه من الممكن أن تفعل ما تريده بحتة في رسم خرائط Nhibernate ... على الرغم من أنني يمكن أن يثبت خطأ من قبل شخص آخر :-)
من السهل جدًا تحديد رسم خرائط مباشر من طاولتك إلى:
class RawFooData
{
public virtual in Id { get; private set; }
public virtual string Name { get; set; }
public virtual string GroupName { get; set; }
}
ثم معالجة هذا للحصول على القيم التي تريدها:
IEnumerable<FooGroup> groups = allRawFooData.Select(data => data.GroupName)
.Distinct()
.Select(name => new FooGroup()
{
Name = name
});
foreach(var group in groups)
{
group.Foos = allRawFooData.Where(data => data.GroupName == group.Name);
}
أعتقد أنك ستجد مشكلات في الأداء هنا فقط إذا كنت تتعامل مع كميات كبيرة جدًا من البيانات (على سبيل المثال صفوف 10K أو أكثر).