مشکل با دیتاست ساخته شده توسط Code Generator های ویژوال استودیو

سلام دوستان وقتتون به خیر
دوستان من در برنامه های گذشتم وقتی میخواستم اطلاعاتی رو از بانک بخونم و به لایه های بالاتر برنامم انتقال بدم، بعد از اینکه اطلاعات مورد نظرم رو از بانک میخوندم، DataTable حاوی اطلاعات رو در همون لایه Data Access در یک <>List کپی کرده و به لایه ی بالاتر منتقل می کردم. برای مثال با فرض اینکه قصد داریم اطلاعات جدول Person رو از بانک بخونیم و PersonEntity هم شی متناظر جدول در برناممون هست :
PHP:
DataTable dtPerson = new DataTable();

.

.

.

dataAdapter.Fill(dtPerson);

List<PersonEntity> personList = new List<PersonEntity>();

foreach (DataRow person in dtPerson.Rows)

{

    PersonEntity personObj = new PersonEntity();

    personObj.ID = (int)person["ID"];

    personObj.Name = (string)person["Name"];

    personObj.Phone = (string)person["Phone"];

    personList.Add(personObj);

}

return personList;
اما چند وقت پیش توو این سایت دیدم که با اضافه کردن DataSet بانک اطلاعاتی به برنامه و کمک گرفتن از شی های متناظر جداول بانک که توسط خود ویژوال طراحی میشن و ترکیب اون با روش بالا میشه راحت تر کد زد. برای مثال با فرض اینکه نام DataSet بانک اطلاعاتیمون dsPhonebook باشه :
PHP:
var dtPerson = new dsPhonebook.PersonDataTable();

.

.

.

dataAdapter.Fill(dtPerson);

List<PersonEntity> personList = new List<PersonEntity>();

foreach (var person in dtPersons)

{

    PersonEntity personObj = new PersonEntity();

    personObj.ID = person.ID;

    personObj.Name = person.Name;

    personObj.Phone = person.Phone;

    personList.Add(personObj);

}

return personList;
خب حالا بیاید تصور کنیم یکی از فیلدهای جدولمون در بانک اطلاعاتی مقدار Null داشته باشه (مثلا فیلد Phone). در روش اول برای جلوگیری از بروز مشکل از یه if قبل از کپی فیلد Phone استفاده می کردیم و مشکل حل میشد :
PHP:
.

.

.

if (person["Phone"] != DBNull.Value)

    personObj.Phone = (string)person["Phone"];

.

.

.
اما در روش دوم امکان این کار وجود نداره. چون اشیای متناظر جداول بانک اطلاعاتی توسط ویژوال طوری طراحی شدن که در اینجور مواقع استثنا تولید کنن :


attachment.php



حالا میخواستم بدونم اساتید محترم نظرشون در این باره چیه و در اینجور مواقع چه می کنند ؟
چیزی که به ذهن من میرسه اینه که، کد مربوط به شی جدول رو که ویژوال تولید کرده تغییر بدم و از یه if در پراپرتی مربوط به بخش get فیلد Phone استفاده کنم به شکل زیر :
PHP:
public string Phone {

    get {

        if (this[this.tabletblPerson.PhoneColumn] != System.DBNull.Value)

            return ((string)(this[this.tabletblPerson.PhoneColumn]));

        else

            return null;

    }

    set {

        this[this.tabletblPerson.PhoneColumn] = value;

    }

}
اماخب اینجوری در دیتابیس های بزرگ باید تمام اشیای متناظر جداولی که توسط ویژوال تولید شده رو تغییر بدم، آیا این روش منطقیه ؟
نظر شما دوستان و اساتید برنامه نویس چیه ؟
ببخشید که سوالم خیلی طولانی شد
ممنونم
 
سلام مجدد
دوستان برای حل این مشکل باید از متد ISNULL مربوط به هر پراپرتی استفاده شود که برای همچین شرایطی پیش بینی شده
موفق باشید
 

جدیدترین ارسال ها

بالا