كيفية تعيين فئة كيان المجموعة من عمود "اسم المجموعة" في Nhibernate؟

StackOverflow https://stackoverflow.com/questions/1367355

سؤال

لدي طاولة في قاعدة البيانات الخاصة بي تبدو مثل هذا:

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 أو أكثر).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top