نمایش نتایج 1 تا 6 از 6

نام تاپیک: مشکل در Insert در حالت ارتباط one to many در linq

  1. #1

    Unhappy مشکل در Insert در حالت ارتباط one to many در linq

    با سلام
    من تو پروژم ارتباط برای درج اینجوری عمل میکنم
    2.jpg

    int UID = 0;
    tblUserDataContext tbluser = new tblUserDataContext();

    tblUser tUser = new tblUser();

    tUser.uName = "ali";



    tUser.uEmail = "mm@yahoo.com";
    tUser.uPhone = "00983333332";
    tUser.uDate = "1393/11/15";
    tUser.uUserName = "ali123";
    tUser.uPassword = "123456";


    tbluser.tblUsers.InsertOnSubmit(tUser);
    //-------------------------
    try
    {
    tbluser.SubmitChanges(); // only tblUser Change
    UID = tUser.uID;
    }
    catch (Exception e)
    {
    return e.ToString();

    }


    tblFamily tFamily = new tblFamily();

    tFamily.FK_UID = UID;
    tFamily.fName = "reza";
    tFamily.fPhone = "00982221122";


    tbluser.tblFamily.InsertOnSubmit(tFamily);
    try
    {
    tbluser.SubmitChanges();
    }
    catch (Exception e)
    {
    return e.ToString();

    }


    به درستی دستور insert اجرا میشه ولی وقتی میخوام ارتباط دو جدول رو از one to one به one to many تبدیل کنم و در واقع کلید اصلی tblFamily رو بر میدارم این خطا رو میده، البته کلاس dbml رو هم دوباره پاک میکنم و table ها رو دوباره وارد میکنم باز همین خطا رو دارم.

    که ٍپیغام خطا میده
    Can't perform Create, Update, or Delete operations on 'Table(tblFamily)' because it has no primary key.
    از دوستان اگر میشه راهنمایم کنن ممنون میشم که چطوری ارتباط یک به چند داشته باشم با کد، چون درحالت دستی با خود sql manager درج انجام میشه بدون مشکل.
    عکس های ضمیمه عکس های ضمیمه
    • نوع فایل: jpg 1.jpg‏ (31.4 کیلوبایت, 14 دیدار)

  2. #2
    کاربر دائمی
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    تهران
    پست
    1,629

    نقل قول: مشکل در Insert در حالت ارتباط one to many در linq

    سلام
    صورت مساله خیلی بد طرح شده، چون هم طراحی دو جدولش مشکل داره و هم مشکلی که مطرح کردی.
    یعنی چی که جدول کاربر و فامیل رو جدا کردی؟
    این یعنی چی که FK_UID رو کلید اصلی کردی؟
    چرا fID کلید اصلی نیست؟

    چیزی که مطرح کردی بیشتر شبیه معما هست تا مشکل نرم‌افزاری.
    شما اول بگو چیکار می‌خوای بکنی، منظورت از دو جدولی که مطرح کردی چیه تا من و دیگر دوستان بتونیم کمک کنیم.

    اما در کل، اگه فرض کنیم که دلیل منطقی برای وجود این دو جدول وجود داشته باشه
    باید تو جدول فامیلی، fID کلید اصلی باشه

    صبا صبوحی

  3. #3

    نقل قول: مشکل در Insert در حالت ارتباط one to many در linq

    با سلام به دوست عزیزم آقای صبا صبوحی و تشکر بخاطر پاسختون
    من جدولی رو که طرح کردم جدول اصلی پروژم نبود و فقط فیلدها رو مثال زدم اصلا مهم نیست فیلدها چی باشن
    توی این مثال uID از جدول tblUser کلید اصلی و FK_UID از جدول tblFamily کلید خارجی اون هستند. اگر من FK_UID رو هم Primery key کنم در واقع ارتباط ریلیشنمون یک به یک میشه، در صورتی که من یک ارتباط یک به چند میخوام.
    البته من جواب سئوالم رو خودم حل کردم به اینصورت که توی دیاگرام اصلی sql ریلیشن ها رو درست ترسیم میکنیم یعنی یک به یک و یک به چند رو درست طراحی میکنیم، ولی توی کلاس dbml باید حتما ارتباط ها رو با کلید مشخص کرد مثل تصویر اول که هم uID کلید هست و هم FK_UID، فقط از بخش cardinality با یک ارتباط رو one to many کرد. این مشکل حل میشه و دیگه خطا نمیده و داده ها به درستی در بانک ذخیره میشن،
    من مشکلم حل شده ولی از نظر منطقی کارم درست نیست، و دلیل اینو نمیدونم.
    اما در کل، اگه فرض کنیم که دلیل منطقی برای وجود این دو جدول وجود داشته باشه
    باید تو جدول فامیلی، fID کلید اصلی باشه
    بله در صورت نیاز باید fID کلید بشه که البته احتیاجی نیست. شما به نام table ها دقت نکنید من فقط یه مثال زدم.

    باز ممنون از پاسختون

  4. #4
    کاربر دائمی
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    تهران
    پست
    1,629

    نقل قول: مشکل در Insert در حالت ارتباط one to many در linq

    سلام
    دوست عزیز، مثل این که کار زیاد داریم.
    1. کی گفته که FK_UID باید کلید باشه؟ این خیلی کار اشتباهیه.
    2. FID باید حتماً کلید اصلی باشه.
    3. در این صورت ارتباط یک به چند خواهد بود.
    4. اگه از Database First استفاده می‌کنی حتماً باید همه ارتباط‌ها رو توی دیتابیس مشخص کنی و
    بعد EDMX رو بسازی
    و مطلقاً تو DataModel تغییری نده.
    5. یعنی چی که «در صورت نیاز» باید fId کلید بشه؟ خوب معلومه که باید کلید باشه.

    دوست من، طراحی دیتابیس اصولی داره که باید اونا رو بشناسی و رعایت کنی. یه جاهایی هست که می‌تونی به سلیقه‌ی
    خودت چیزهایی رو تغییر بدی یا دیتابیس رو از نرمال خارج کنی. اما این دیگه به نظر من غیر قابل قبوله که بجای کلید اصلی،
    کلید خارجی رو کلید اصلی کنی و . . .

    دو تا پیش‌نهاد دارم:
    1. قبل از شروع کار، یه زمانی بگذار و روی طراحی دیتابیس یه مطالعه کوچیک انجام بده. یا این که این قسمت رو
    به یه طراح واگذار کن و خودت فقط کد برنامه رو بر اساس دیتابیس طراحی شده انجام بده.
    2. اگه کارت رو تازه داری شروع می‌کنی، همه این‌ها رو بگذار کنار و CodeFirst کار کن. حالا که می‌خوای یاد بگیری
    به‌تره که از آخرین تکنولوژی‌ها استفاده کنی.

    صبا صبوحی

  5. #5

    نقل قول: مشکل در Insert در حالت ارتباط one to many در linq

    با سلام مجدد
    نقل قول نوشته شده توسط SabaSabouhi مشاهده تاپیک
    دوست عزیز، مثل این که کار زیاد داریم.
    1. کی گفته که FK_UID باید کلید باشه؟ این خیلی کار اشتباهیه.
    2. FID باید حتماً کلید اصلی باشه.
    3. در این صورت ارتباط یک به چند خواهد بود.
    4. اگه از Database First استفاده می‌کنی حتماً باید همه ارتباط‌ها رو توی دیتابیس مشخص کنی و
    بعد EDMX رو بسازی
    و مطلقاً تو DataModel تغییری نده.
    5. یعنی چی که «در صورت نیاز» باید fId کلید بشه؟ خوب معلومه که باید کلید باشه.

    دوست من، طراحی دیتابیس اصولی داره که باید اونا رو بشناسی و رعایت کنی. یه جاهایی هست که می‌تونی به سلیقه‌ی
    خودت چیزهایی رو تغییر بدی یا دیتابیس رو از نرمال خارج کنی. اما این دیگه به نظر من غیر قابل قبوله که بجای کلید اصلی،
    کلید خارجی رو کلید اصلی کنی و . . .

    دو تا پیش‌نهاد دارم:
    1. قبل از شروع کار، یه زمانی بگذار و روی طراحی دیتابیس یه مطالعه کوچیک انجام بده. یا این که این قسمت رو
    به یه طراح واگذار کن و خودت فقط کد برنامه رو بر اساس دیتابیس طراحی شده انجام بده.
    2. اگه کارت رو تازه داری شروع می‌کنی، همه این‌ها رو بگذار کنار و CodeFirst کار کن. حالا که می‌خوای یاد بگیری
    به‌تره که از آخرین تکنولوژی‌ها استفاده کنی.
    آقای صبوحی خیلی ممنون از راهنمایتون بله کاملا گفته شما درسته و تازه متوجه منظورتون شدم. و پروژه رو کاملا همونطور که فرمودید تغییر دادم و بدون مشکل حل شد.
    من مفهوم دیتا بیس رو کامل میدونم ولی چون خیلی وقت بود کار نکرده بودم یادم رفته بود. ولی با گفته های شما یادم اومد.
    فقط یه سوال دیگه اینکه رابطه یک به یک به چه شکلی میشه؟!
    باز ممنون بابت پیشنهادتون
    آخرین ویرایش به وسیله kanionline : دوشنبه 18 اسفند 1393 در 19:27 عصر

  6. #6
    کاربر دائمی
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    تهران
    پست
    1,629

    نقل قول: مشکل در Insert در حالت ارتباط one to many در linq

    نقل قول نوشته شده توسط kanionline مشاهده تاپیک
    با سلام مجدد

    آقای صبوحی خیلی ممنون از راهنمایتون بله کاملا گفته شما درسته و تازه متوجه منظورتون شدم. و پروژه رو کاملا همونطور که فرمودید تغییر دادم و بدون مشکل حل شد.
    من مفهوم دیتا بیس رو کامل میدونم ولی چون خیلی وقت بود کار نکرده بودم یادم رفته بود. ولی با گفته های شما یادم اومد.
    فقط یه سوال دیگه اینکه رابطه یک به یک به چه شکلی میشه؟!
    باز ممنون بابت پیشنهادتون
    سلام
    چند تا راه می‌تونم بگم، یکیش همون کاریه که اولش انجام داده بودی، که گمان نکنم کاربرد زیادی داشته باشه مگر حالت‌های خاص.
    یعنی این که کلید خارجی، کلید اصلی هم باشه.
    روش دیگه هم اندیس گذاری هست. شما می‌تونی با گذاشتن اندیس یکتا ( Unique Index ) روی کلید خارجی، رابطه رو یک به یک کنی

    صبا صبوحی

تاپیک های مشابه

  1. مشکل با insert در query
    نوشته شده توسط lord_viper در بخش برنامه نویسی در Delphi
    پاسخ: 1
    آخرین پست: سه شنبه 07 فروردین 1386, 07:53 صبح
  2. مشکل دستور Insert into در VB.net
    نوشته شده توسط alineghabi در بخش VB.NET
    پاسخ: 8
    آخرین پست: یک شنبه 01 بهمن 1385, 11:25 صبح
  3. مشکل در Insert جدول موقت
    نوشته شده توسط Mohammad_Mnt در بخش SQL Server
    پاسخ: 2
    آخرین پست: جمعه 15 اردیبهشت 1385, 21:03 عصر
  4. مشکل در تغییر رنگ حالت disable فیلد Textbox
    نوشته شده توسط Maryam_y_m در بخش VB.NET
    پاسخ: 3
    آخرین پست: شنبه 28 آبان 1384, 08:24 صبح
  5. یه مشکل با insert into
    نوشته شده توسط afsar در بخش ASP.NET Web Forms
    پاسخ: 2
    آخرین پست: جمعه 19 فروردین 1384, 19:26 عصر

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •