PDA

View Full Version : LINQ TO SQL



مهدیعای
پنج شنبه 20 آبان 1389, 18:28 عصر
با سلام
آیا در یک پروژه ای که تقریبا 60 تا جدول داره می توان این 60 تا جدول را داخل یه LINQ TO SQL قرار داد و کار کرد یعنی بعدها مشکلی پیش نمی یاد و من از EF استفاده نمی کنم چون سرعت واکشی داده از EF به نظر من کمتر از LINQ TO SQL است به همین خاطر اگر این کار انجام شدنی باشه از LINQ TO SQL استفاده کنم

majid325
شنبه 22 آبان 1389, 09:21 صبح
مشکلی نداره ولی شما به سرعت اشاره کردین ، لازمه عنوان کنم که تست سرعت معیار های خاصی داره یکی از معیارهاش سرعت واکشی در N بارم هست که مبحث caching اینجا مطرح میشه , در نهایت اینکه EF از Caching بهتری نسبت به LinqToSql بهره میبره

مهدیعای
شنبه 22 آبان 1389, 16:31 عصر
مشکلی نداره ولی شما به سرعت اشاره کردین ، لازمه عنوان کنم که تست سرعت معیار های خاصی داره یکی از معیارهاش سرعت واکشی در N بارم هست که مبحث caching اینجا مطرح میشه , در نهایت اینکه EF از Caching بهتری نسبت به LinqToSql بهره میبره
من تنها به این خاطر از EF استفاده نمی کنم فقط به خاطر سرعت کانکت شدن به EF برای اولین بار حداقل پنج شش ثانیه طول می کشه که خیلی ضایع بازیه اگه راه حلی دارید که این زمان را منطقی تر کنید من خودم هم دوست دارم از EF استفاده کنم با تشکر

majid325
یک شنبه 23 آبان 1389, 14:13 عصر
سرعت کانکت شدن به EF برای اولین بار حداقل پنج شش ثانیه طول می کشه

نه فکر میکنم یه جای کار شما مشکل داره!!
5 ، 6 ثانیه کانکت شدن !!! میتونید اون قسمت از کد که 5 ، 6 ثانیه زمان میبره رو بزارین؟

مهدیعای
یک شنبه 23 آبان 1389, 15:37 عصر
با سلام

نه فکر میکنم یه جای کار شما مشکل داره!!
5 ، 6 ثانیه کانکت شدن !!! میتونید اون قسمت از کد که 5 ، 6 ثانیه زمان میبره رو بزارین؟
من موقع استفاده از EF یک Class Library جدید به پروژه اضافه کرده و یک ADO.NET Entity DataModel به Class Library اضافه کرده و جدولهای دیتا بیس خودم را از طریق ویزارد اضافه می کنم و نام کانکشن ConnDB می ذارم و پروژه را Build میمنم و dll تولید شده را تو پروژه خودم اضافه می کنم و بعد تو پروژه اصلی این کارها را انجام می دم مثلا ما تو دیتابیس مون یه جدول به نام Check داریم اول یک کلاس به صورت زیر اضافه می کنم


public class CheckCollection : ObservableCollection<Check>
{
private Conn_DB _Context;
public Conn_DB Context
{
get { return _Context; }
}
public CheckCollection(IEnumerable<Check> ModelObject, Conn_DB context)
: base(ModelObject)
{
_Context = context;
}
protected override void InsertItem(int index, Check item)
{
this.Context.AddToCheck(item);
base.InsertItem(index, item);
}
protected override void RemoveItem(int index)
{
this.Context.DeleteObject(this[index]);
base.RemoveItem(index);
}
}
بعد تو کد XAML مربوط به Window بک CollectionViewSource ایجاد کرده و اون را به دیتاگرایدم بایند می کنم که به صورت زیر است

<Window ....>
<Window.Resources>
<CollectionViewSource x:Key="Check_ViewSource" /></Window.Resources>
<DataGrid Name="Check_DataGrid"
.. ItemsSource="{Binding Source={StaticResource Check_ViewSource}}">بعد تو code behind مربوط به Window کد زیر را قرار می دم


public partial class Win_Check: Window
{
private Conn_DB Conn_DataModel;
private ListCollectionView View;
private Check_Collection Check_Data;
private void Window_Loaded(object sender, RoutedEventArgs e)
{
Conn_DataModel=new Conn_DB();
var check_ViewSource = ((CollectionViewSource)(this.FindResource("Check_ViewSource")));
var query = (from c in Conn_DataModel.Check
select c).ToList();
Check_Data = new Check_Collection(query, Conn_DataModel);
check_ViewSource.Source =Check_Data;
this.View = ((ListCollectionView)(check_ViewSource.View));

}اگر این کد ایراد داره و باعث می شه که برای اولین بار کانکت من زیاد طول بکشه ممنون می شم راهنماییم کنید با تشکر

PetekDincos
دوشنبه 24 آبان 1389, 17:37 عصر
فکر نکنم ایرادی داشته باشه

majid325
سه شنبه 25 آبان 1389, 11:20 صبح
معماریتون Rapid نیست ، البته این موضوع باعث نمیشه که تکه کد بالا 5 ثانیه زمان ببره مگر اینکه حداقل بالای 1000 تا رکورد load کنید

مهدیعای
سه شنبه 25 آبان 1389, 18:12 عصر
با سلام

معماریتون Rapid نیست ، البته این موضوع باعث نمیشه که تکه کد بالا 5 ثانیه زمان ببره مگر اینکه حداقل بالای 1000 تا رکورد load کنید
چه تغییراتی تو کدم بدم که معماریم Rapid بشه و در ضمن اینکه من می خوام 60 تا جدول را به یک ORM یک جا اضافه کنم آیا تعداد رکوردهای این جدول ها در سرعت تاثیر داره یعنی اگر تعداد رکوردهای یه جدول 100000 تا با حالتی که تعداد رکوردهای جدول 100 تا است سرعتشون فرق می کنه نه در گرفتن کوئری از ORM مثلا یک کوئری 1000 رکورد برگردونه و یه کوئری دیگه 100 تا بلکه سرعتش در کانکت شدن به ORM با تشکر

مهدیعای
شنبه 29 آبان 1389, 08:53 صبح
با سلام
من چه تغییری در کدی که در پست 5 نوشتم بدم تا کدم بهینه تر بشه با تشکر

majid325
شنبه 29 آبان 1389, 09:12 صبح
با سلام
چه تغییراتی تو کدم بدم که معماریم Rapid بشه

لایه بندیتون درست نیست (MVVM)


می خوام 60 تا جدول را به یک ORM یک جا اضافه کنم

معمولا میگن :
میخوام 60 تا جدول را با ORM تو سیستم Map کنم
پس در این حالت تعداد کلاس های ایجاد شده از جداول کمتر میشه
در کل اگه به معماری و اهداف ORM تسلط داشته باشی مشکلی نداره


آیا تعداد رکوردهای این جدول ها در سرعت تاثیر داره یعنی اگر تعداد رکوردهای یه جدول 100000 تا با حالتی که تعداد رکوردهای جدول 100 تا است سرعتشون فرق می کنه نه در گرفتن کوئری از ORM مثلا یک کوئری 1000 رکورد برگردونه و یه کوئری دیگه 100 تا بلکه سرعتش در کانکت شدن به ORM با تشکر

نه هیچ مشکلی نداره

مهدیعای
شنبه 29 آبان 1389, 12:28 عصر
با سلام دوست عزیز اگر امکانش هست یه مثال یا یه لینکی که کانکت شدن به EF را به صورت بهینه انجام می دهد در اینجا فرار بدید با تشکر