PDA

View Full Version : بهترین روش برای ارسال لیستی از contactها به SQL



resident
جمعه 09 اسفند 1392, 08:44 صبح
سلام. فرض کنید کلاس زیر رو داریم:

class Person{
string name {get;set;}
list<Contact> contacts {get;set;}
}

class Contact {
int type {get;set;}
string title {get;set;}
….
}


حالا من میخوام Person رو بفرستم به SQL.
میخوام بدونم Performanceچه روشی براای ارسال Contacts بهتره؟
آیا بهتره لیست Contact ها رو به XML تبدیل کنم بفرستم به SP یا به json تبدیلش کنم؟ یا روش دیگه ای ؟

ممنونم

fakhravari
جمعه 09 اسفند 1392, 12:57 عصر
روش جالبی که نیست.
شما باید تک تک در دیتابیس درج کنید بعد به صورت تابعی که میگید بخونید

Mahmoud.Afrad
جمعه 09 اسفند 1392, 14:54 عصر
در یک تراکنش مشخصات فرد و contactها رو ذخیره کنید. بهتره یک باره این کار رو انجام بدید. کد بزارید تا اصلاح بشه.

resident
جمعه 09 اسفند 1392, 18:31 عصر
آخه من میخوام همه transaction ها تو بانک باشه. نمیخوام تو برنامه باشه. به همین دلیل میخوام همه رو بفرستم به SP و اونجا همه ی insert ها انجام بشه
سرچ می کردم ظاهرا از table-value parameter ها هم میشه استفاده کرد...

Mahmoud.Afrad
جمعه 09 اسفند 1392, 18:47 عصر
از چه تکنولوژی استفاده میکنی؟ تا چه حد پیش رفتی؟ کد؟؟؟

resident
جمعه 09 اسفند 1392, 20:26 عصر
از چه تکنولوژی استفاده میکنی؟ تا چه حد پیش رفتی؟ کد؟؟؟

از EF استفاده می کنم.
اینم کدم:

protected override void InsertWrap(Common.Abstraction.Base.IEntity entity, int userId, System.Data.Objects.ObjectParameter errorNumber)
{
var person = (CommonPerson)entity;

string activityFieldsXml;
string affiliationsXml;
string rankingsXMl;

var contactsXml = BuildPerson(person, out activityFieldsXml, out affiliationsXml, out rankingsXMl);

GetContext().PersonInsert(person.Person_FirstName, person.Person_LastName, person.Person_Sexular, person.Person_PrefixID, person.Person_FatherName, person.Person_BirthDate, person.Person_MarriageDate, person.Person_Psychology, person.Person_ImagePath, person.Person_NationalCode, person.PersonCompany_AcquaintanceMethodID, person.PersonCompany_Credit, person.PersonCompany_Description, contactsXml, activityFieldsXml, affiliationsXml, rankingsXMl, null, userId, errorNumber);
}

BuildPerson ، انتیتی personرو می گیره و متغیرهایی که از نوع لیست هستند رو به xml تبدیل می کنه و بعد insert می شه. داخل بانک هم این XML خونده میشه و اطلاعاتشون تو جداول مربوطه ریخته میشه

Mahmoud.Afrad
جمعه 09 اسفند 1392, 21:31 عصر
وقتی داری EF کار میکنی نیازی به این کارها نیست. اسکریپت جدول person و contact رو بزار تا با کد برات توضیح بدم. خیلی راحت تر از اونیه که خودتو به دردسر بندازی.

resident
جمعه 09 اسفند 1392, 22:12 عصر
وقتی داری EF کار میکنی نیازی به این کارها نیست. اسکریپت جدول person و contact رو بزار تا با کد برات توضیح بدم. خیلی راحت تر از اونیه که خودتو به دردسر بندازی.


CREATE TABLE [Person](
[PersonID] [int] NOT NULL,
[FirstName] [nvarchar](50) NULL,
[LastName] [nvarchar](100) NOT NULL,
[Sexular] [bit] NULL,
[PrefixID] [int] NULL
)


CREATE TABLE [Contact](
[ContactID] [int] IDENTITY(1,1) NOT NULL,
[PersonID] [int] NULL,
[Title] [nvarchar](400) NOT NULL,
[ContactTypeID] [int] NOT NULL,
[Internal] [nvarchar](5) NULL,
[Description] [nvarchar](200) NULL
)


یه نکته ای رو هم که باید بگم اینه که تو این پروژه ، ما فقط SP ها رو به edmx اضافه کردیم و جداول و view ها رو نداریم....

Mahmoud.Afrad
جمعه 09 اسفند 1392, 22:54 عصر
یه نکته ای رو هم که باید بگم اینه که تو این پروژه ، ما فقط SP ها رو به edmx اضافه کردیم و جداول و view ها رو نداریم....
میتونم بپرسم پس برای چی از EF استفاده میکنی؟

به شرطی که ارتباط بین دو جدول رو برقرار و جداول رو به edmx اضافه کرده باشی بصورت زیر میتونی شخص جدید همراه کانتکتهاش رو اضافه کنی:

Person p = new Person();
p.FirstName = "a";
p.LastName = "aa";
Contact c1 = new Contact() { Title = "t" , ContactTypeID = 2 , Description="ttttttttt" };
Contact c2 = new Contact() { Title = "s", ContactTypeID = 1, Description = "sssssssss" };
p.Contact.Add(c1);
p.Contact.Add(c2);

Database1Entities db = new Database1Entities();
db.AddToPerson(p);
db.SaveChanges();

resident
شنبه 10 اسفند 1392, 10:28 صبح
میتونم بپرسم پس برای چی از EF استفاده میکنی؟


متاسفانه پروژه رو اینطوری تحویل بنده دادن...
خودم از اول طراحیش نکردم.