PDA

View Full Version : سوال: استفاده از SP ها در EF Code First



jaykob
پنج شنبه 14 خرداد 1394, 15:10 عصر
سلام دوستان

من می خواستم بدونم چطور در Ef code first می شه از SP ها مختلف استفاده کرد . من لینک زیر رو دیدم

http://www.asp.net/mvc/overview/getting-started/getting-started-with-ef-using-mvc/async-and-stored-procedures-with-the-entity-framework-in-an-asp-net-mvc-application

اما توضیح واضحی نیست فقط داخل Context اومده گفته موجودیت من MapToStoredProcedure بشه و بعد هم ۳ تا sp با پسوند های insert , delete , update ساخته ولی دیگه نه جایی اینارو صدا زده و نه کار دیگه ... این اولین مورد

مورد بعدی هم اینه که چطور sp های دیگه مثلا گزارش گیری هامون رو صدا بزنیم و پارامتر بدیم و خروجی بگیریم ... ؟

ممنون می شم در این مورد توضیحاتی بدید ...

salar IT man
پنج شنبه 14 خرداد 1394, 16:25 عصر
از این مقاله استفاده کنید :http://www.dotnettips.info/post/2050/%D9%81%D8%B1%D8%A7%D8%AE%D9%88%D8%A7%D9%86%DB%8C-stored-procedure-%D9%88-table-value-function-%D8%AF%D8%B1-ef-code-first

jaykob
پنج شنبه 14 خرداد 1394, 16:46 عصر
از این مقاله استفاده کنید :http://www.dotnettips.info/post/2050/%D9%81%D8%B1%D8%A7%D8%AE%D9%88%D8%A7%D9%86%DB%8C-stored-procedure-%D9%88-table-value-function-%D8%AF%D8%B1-ef-code-first

ممنون

اما آیا این تنها راهکار هستش ؟

چون من مدل های فراخوانی دیگه ای دیدم . و این لینکی که دادید کمی به نظر من نامفهوم اومد ...

ممنون می شم بیشتر راهنمایی کنید

r4hgozar
پنج شنبه 14 خرداد 1394, 19:13 عصر
سلام.
سوالی که من دارم و تو چند تا بحث دیگه هم مطرح کردم اما دوستان جواب ندادن اینه که آیا ضرورتی یا مزیتی داره وقتی ما از code fisrt استفاده می کنیم و لایه repository و service رو داریم بیایم و از Store Procedure ها استفاده کنیم؟؟
حالا وقتی اصلا دیتابیس ما ساخته نشده در شورع برنامه آیا اصلا میشه این کار رو انجام داد؟ و آیا مفهوم Code First بودن رو زیر سوال نمی بره؟

salar IT man
پنج شنبه 14 خرداد 1394, 21:21 عصر
ممنون

اما آیا این تنها راهکار هستش ؟

چون من مدل های فراخوانی دیگه ای دیدم . و این لینکی که دادید کمی به نظر من نامفهوم اومد ...

ممنون می شم بیشتر راهنمایی کنید

چه مدل هایی؟ قبلا فقط این امکام بود که شما عملیات حذف/ویرایش/درج مربوط به EF را تغییر بدهید و با استفاده از رویه های ذخیره شده به شکل زیر عمل کنید:
http://www.c-sharpcorner.com/UploadFile/ff2f08/code-first-stored-procedure-entity-framework-6-0/
این یک کتابخانه ثالث است برای رسید به هدفی که مد نظر شما هم بود. شاید پروژه های دیگری هم برای این کار در نظر گرفته شده است بنده خبر ندارم.
دلیل این که برای شما نامفهوم است را نمیدانم ولی میتوانید سورس آن را بررسی کنید.https://codefirstfunctions.codeplex.com/SourceControl/latest#CodeFirstStoreFunctions/FunctionDiscovery.cs

در واقع یک قرار داد به نام FunctionConvention و یکسری اتریبیوت در نظر گرفته گرفته شده در این کتابخانه به ما کمک میکنند که به مقصود خود برسیم

salar IT man
پنج شنبه 14 خرداد 1394, 21:33 عصر
سلام.
سوالی که من دارم و تو چند تا بحث دیگه هم مطرح کردم اما دوستان جواب ندادن اینه که آیا ضرورتی یا مزیتی داره وقتی ما از code fisrt استفاده می کنیم و لایه repository و service رو داریم بیایم و از Store Procedure ها استفاده کنیم؟؟
حالا وقتی اصلا دیتابیس ما ساخته نشده در شورع برنامه آیا اصلا میشه این کار رو انجام داد؟ و آیا مفهوم Code First بودن رو زیر سوال نمی بره؟

بهتر بود این تاپیک در قسمت مربوط به خودش ایجاد میشد !
1-اصلا لایه بندی نرم افزار شما ربطی به استفاده کردن یا نکردن از رویه های ذخیره شده ندارد !
2-این رویه ها بعد از ساخت دیتابیس شما ساخته خواهند شد به شگل زیر به عنوان مثال


public class MyContextInitializer : DropCreateDatabaseAlways<MyContext>
{
public override void InitializeDatabase(MyContext context)
{
base.InitializeDatabase(context);

context.Database.ExecuteSqlCommand(
"CREATE PROCEDURE [dbo].[GetCustomersByName] @Name nvarchar(max) AS " +
"SELECT [Id], [Name], [ZipCode] " +
"FROM [dbo].[Customers] " +
"WHERE [Name] LIKE (@Name)");

context.Database.ExecuteSqlCommand(
"CREATE FUNCTION [dbo].[CustomersByZipCode](@ZipCode nchar(5)) " +
"RETURNS TABLE " +
"RETURN " +
"SELECT [Id], [Name], [ZipCode] " +
"FROM [dbo].[Customers] " +
"WHERE [ZipCode] = @ZipCode");
}

protected override void Seed(MyContext context)
{
context.Customers.Add(new Customer {Name = "John", ZipCode = "98052"});
context.Customers.Add(new Customer { Name = "Natasha", ZipCode = "98210" });
context.Customers.Add(new Customer { Name = "Lin", ZipCode = "98052" });
context.Customers.Add(new Customer { Name = "Josh", ZipCode = "90210" });
context.Customers.Add(new Customer { Name = "Maria", ZipCode = "98074" });
context.SaveChanges();
}
}



3-نخیر این کوئری ها بعد از ساخته شدن دیتابیس اجرا خواهند شد.

r4hgozar
پنج شنبه 14 خرداد 1394, 21:59 عصر
ممنون.
اما ممنون میشم سوال اولم رو که

آیا ضرورتی یا مزیتی داره وقتی ما از code fisrt استفاده می کنیم در EF از Store Procedure ها استفاده کنیم؟؟
جواب بدن دوستان.
وقتی async رو می تونیم استفاده کنیم.

salar IT man
پنج شنبه 14 خرداد 1394, 22:50 عصر
ممنون.
اما ممنون میشم سوال اولم رو که

آیا ضرورتی یا مزیتی داره وقتی ما از code fisrt استفاده می کنیم در EF از Store Procedure ها استفاده کنیم؟؟
جواب بدن دوستان.
وقتی async رو می تونیم استفاده کنیم.

سوال اول شما اشتباه بود دوست من!

بیشتر بستگی به شرایط داره در این مورد بحث شده است در این جا https://www.linkedin.com/grp/post/40949-5920511867029057539

متدها ی async موجود در EF دلیل بر این نیست که دیگه رویه ها را کنار بگذاریم!! شما میتوانید متد های نا همزمانی برای روشی که در کتابخانه معرفی شده در پست های قبل ، در نظر بگیرید!!