هل يمكن أن يعمل iBatis.net مع ICollection؟
-
03-07-2019 - |
سؤال
هذا السؤال يتعلق بسؤال آخر لدي: باستخدام ibatis.net مع واجهات ووحدة مجموعة مخصصة عامة
يبدو أن المشكلة هي أن ibatis.net لن تملأ مجموعة مخصصة فقط (أي QueryForObject ("select_foo") التي تحتوي على مجموعة مخصصة من القضبان) إذا كانت مثيلًا ملموسًا للمجموعة المخصصة وليس الواجهة. هل يعرف أي شخص ما إذا كان هذا هو قيود على ibatis.net أو إذا كانت هناك طريقة للقيام بذلك؟
شكرًا،
بول
المحلول
إذا فهمت لك الحق ، فأنت ترغب في التحكم الكامل في الطريقة التي يقوم بها Ibatis بتعيين بعض الأشياء.
يمكنك القيام بذلك مع ItypeHandlerCallback. يمكنك البحث عن وصف كامل في وثائق PDF في القسم "3.5.5. معالجات النوع المخصص".
لقد فعلت شيئًا مشابهًا مع DataTables. قد يبدو تنفيذك مشابهًا لهذا:
class DataTableBuilder : ITypeHandlerCallback
{
public object GetResult(IResultGetter getter)
{
IDataReader reader = getter.DataReader;
// (A) define whatever type you want to
// (B) read rows from DataReader and populate your type from (A)
while (reader.Read())
{
// iterate over the columns of the current row
for (int i = 0; i < reader.FieldCount; i++)
{
// populate your type from (A)
}
}
return ...; // return your type from (A)
}
// implement the other members of ITypeHandlerCallback
// the implementation below actually worked for me
public object NullValue { get { return null; } }
public void SetParameter(IParameterSetter setter, object parameter) { }
public object ValueOf(string s) { return s; }
}
ملاحظة أخيرة: Ibatis على ما يرام لبناء كائنات نقل البيانات (DTOs). إذا جربت شيئًا مثل أعلاه ، فقد تتحرك بالفعل نحو نهج كائن العمل. قد يصبح هذا مؤلمًا مع Ibatis. حاليًا (حسنًا ... لبضعة أشهر بالفعل ، بسبب قلة الوقت) أقوم بتقييم nhibernate كبديل. أعتقد أن Nhibernate يتعامل مع كائن العمل بشكل أكثر سلاسة مما يفعله Ibatis.