PDA

View Full Version : سوال: ساخت دیتابیس از روی الگو EF



علی فتحی
یک شنبه 28 تیر 1394, 21:08 عصر
سلام: ببخشید سوال رو در قسمت سی شارپ طرح کردم متسفانه بخشهای دیگر تاپیکها جواب داده نمیشه

همچنان که میدونید با انتی تی ef .میشه از روی الگو بانک اطلاعاتی یا همان دیتابیس رو ساخت Model1.edmx.sql

سوالم اینه : آیا با همین الگو میشه جدول اضافه شده به الگو رو به دیتابیس اماده برنامه اضافه کرد؟
مثلا من دیتابیس در مسیر برنامه بصورت engine دارم روش هم اطلاعات وارد شده حالا یک جدول جدید که لازم شده میخوام بسازم چگونه بدون حذف اطلاعات قبلی این کارو انجام بدم
اصلا ایا همچین چیزی امکان داره؟

Mahmoud.Afrad
یک شنبه 28 تیر 1394, 23:50 عصر
اول از دیتابیست یک بکاپ بگیر.
سپس ، اگر از روش database first استفاده میکنی ، از طریق پنجره server explorer ویژوال استادیو یا sql management studio جدول جدید رو به دیتابیس مورد نظرت اضافه کن. حالا در ویژوال استادیو ، مدل Model1.edmx رو باز کن و در جای خالی راست کلیک و Update model from database رو انتخاب کن. حالا در پنجره باز شده در تب add جدول جدید رو انتخاب و به مدل اضافه کن.

علی فتحی
دوشنبه 29 تیر 1394, 00:17 صبح
روش شما همون طریقه ساخت بانک روی سیستم خام هستش . ولی من برنامه رو ارائه دادم حالا دست طرف داره باش کار میکنه .ازم خواسته یه مورد اضافه کنم که جدول جدید میخواد .حالا من میخوام فقط تغییرات رو در برنامه انجام بدم . جدول خواسته شده با کد نویسی به دیتابیس قبلی اضافه بشه.

ژیار رحیمی
دوشنبه 29 تیر 1394, 00:33 صبح
با این اوصاف پروژه شما دست مشتری هست.اول تو سورس پروژه که داری
Model1.edmx جدول یا جداول جدید با ارتباطات موجود رو اضافه کن پس دیتابیس رو از روی مدل آپدیت کن دوم کدهای داخل برنامه که مربوط به کار با جداول هست بنویس و وقتی کار تموم شد حتما باید exe پروژه + به همراه اسکریپت جداول اضافه شده (این اسکریپت یا اسکریپت ها رو ار داخل sqlserver بخش جنریت اسکریپت استخراج کن به همراه exe پروژه به سیستم مشتری انتقال میدی. قبل از اجرای پروژه روی سیستم مشتری باید اسکریپت جداول گرفته شده به صورت دستی به بانک اطلاعاتی اضافه شود و وقتی اظافه شده فایل exe جدید رو جایگزین فایل exe قدیمی کن

علی فتحی
دوشنبه 29 تیر 1394, 16:02 عصر
اقای زاگروتی عزیز ممنونم که تاپیکهای بنده رو تحت نظر داری.من اگر دسترسی به بانک مشتری داشتم مشکلی نبود میگرفتم و دستی تغییرات رو در 1 دقیقه اعمال میکردم و exe رو دوباره سازی میکردم.مشکل اینه برنامه بنده در 18 شهرستان داره استفاده میشه . من نمیتونم برم تک تک اونا رو اپدیت کنم.فقط میتونم قسمتهای اجرایی رو اینترنتی ارسال کنم طرف درقسمت نصب نرم افزار کپی کنه و برنامه اپدیت بشه .تاحالا چندین بار همچین تغییراتی رو اعنال کردم مشکلی هم پیش نیومده بود : (چون 4 تا جدول متفاوت با فیلدهای متفاوت زاپاس ساخته بودم)و هنگام کار از اونا بهره گرفتم. حالا طرف موردی میخواد ثبت مشاغل رو هم داشته باشه که متصفانه جدول اضافی دربانک ندارم . باید جدید بسازم .

مشکل اصلی من در اپدیت بانک اطلاعاتی :دیتابیس هستش.

بعضی ازدوستان توصیه کردن .اطلاعات تک تک جدولها رو با کد نویسی به xml تبدیل کنم و دربرنامه جدیدکه دیتابیس جدید داره اطلاعات لازم رو ازxml وارد جدولها کنم.البته این روش و هم انجام دادم تقریبا بد نیست ولی خیلی زمانبر هست.با تشکر

ژیار رحیمی
دوشنبه 29 تیر 1394, 16:47 عصر
خب دوست گرامی اونم براش راه حل هست.شما باتوجه به آنچه که توضیح دادم دو فایل exe و script جداول رو+ یه فایل exe به عنوان repairDatabase که کار اعمال اسکریپت sql روی دیتابیس باشه بساز .سه فایل گفته شده را از طریق اینترنت بفرست .کاربر ابتدا فایل exe بازسازی دیتابیس رو اجرا سپس فایل exe اصلی رو جایگزین نماید.
در مورد نحوه ساخت فایل exe ای که کار بازسازی و اجرای script رو روی sql داشته باشه سوالی بود در خدمتم

علی فتحی
دوشنبه 29 تیر 1394, 22:46 عصر
این کد از دوست خوبمون اقا سعید:
private void CreateDb() { if (!File.Exists(Application.StartupPath + @"..\DbTelePhone.mdf")) { try { string sqlConnectionString = @"Data Source=.\SQLEXPRESS;Initial Catalog=master;Integrated Security=True"; // کانکشن اس کیوال StreamReader createDatabaseScriptStreamReader = File.OpenText(@"Script.sql"); // معرفی فایل تکست using (SqlConnection sqlConnection = new SqlConnection(sqlConnectionString)) { sqlConnection.Open(); ExecuteScript(createDatabaseScriptStreamReader, sqlConnection); // اجرای متود بالا با پارامتر فایل تکست Application.DoEvents(); sqlConnection.Close(); } MessageBox.Show("بانک اطلاعاتی با موفقیت ایجاد شد", "ایجاد بانک"); } catch { MessageBox.Show("ایجاد بانک با خطا مواجه شد", "خطا"); } } else if (File.Exists(Application.StartupPath + @"DBAPCS.mdf")) { MessageBox.Show("بانک اطلاعاتی قبلا ایجاد شده", "هشدار"); }

علی فتحی
دوشنبه 29 تیر 1394, 22:47 عصر
private void CreateDb() {
if (!File.Exists(Application.StartupPath + @"..\DbTelePhone.mdf"))
{
try
{
string sqlConnectionString =
@"Data Source=.\SQLEXPRESS;Initial Catalog=master;Integrated Security=True"; // کانکشن اس کیوال
StreamReader createDatabaseScriptStreamReader = File.OpenText(@"Script.sql"); // معرفی فایل تکست
using (SqlConnection sqlConnection = new SqlConnection(sqlConnectionString))
{
sqlConnection.Open();
ExecuteScript(createDatabaseScriptStreamReader, sqlConnection);
// اجرای متود بالا با پارامتر فایل تکست
Application.DoEvents();
sqlConnection.Close();
}
MessageBox.Show("بانک اطلاعاتی با موفقیت ایجاد شد", "ایجاد بانک");
}
catch
{
MessageBox.Show("ایجاد بانک با خطا مواجه شد", "خطا");
}
}
else if (File.Exists(Application.StartupPath + @"DBAPCS.mdf"))
{
MessageBox.Show("بانک اطلاعاتی قبلا ایجاد شده", "هشدار");
}