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

نام تاپیک: ایجاد ردیف خالی در جدول Parent بعد از SaveChanges

  1. #1
    کاربر دائمی آواتار mmbguide
    تاریخ عضویت
    اسفند 1386
    محل زندگی
    منظومه شمسی
    پست
    1,172

    ایجاد ردیف خالی در جدول Parent بعد از SaveChanges

    سلاممن یک کلاس از جدول Child میسازم و به db اضافه میکنم و پس از اجرای دستور SaveChanges یک ردیف با اطلاعات Null در جدول Parent ایجاد میشه. چرا این اتفاق میوفته؟ در ستون جدول Child هیچ ارجاعی یه جدول والد نیست و حتی مقدار کلید خارجی در جدول Child رو یک عدد ثابت میذارم که معادل یک ردیف در جدول Parent هست باز هم این اتفاق میوفته. از EF استفاده میکنم. لطفا راهنمایی کنید.تشکر

  2. #2
    کاربر دائمی آواتار mmbguide
    تاریخ عضویت
    اسفند 1386
    محل زندگی
    منظومه شمسی
    پست
    1,172

    نقل قول: ایجاد ردیف خالی در جدول Parent بعد از SaveChanges

    Untitled.png

    سلام

    خروجی دستورات مطابق تصویر بالا خواهد بود.
    جدول سمت راست فهرست کلاس های مورد نظری هستند که در آنها متد تعریف کردم.
    جدول سمت چپ باید متدهای مربوط به هر یک از کلاس هایی که در جدول سمت راست هستند را نگهداری کنه.

    بخش اول دستورات جهت ثبت لیست کلاس ها:

                foreach (Type t in controllerTypes)
    {
    tblPermissionController controllerData = new tblPermissionController();
    controllerData.fldNamespace = t.Namespace;
    controllerData.fldName = t.Name.Replace("Controller", "");
    var controllerAttributes = t.CustomAttributes;
    if (controllerAttributes != null)
    {
    foreach (CustomAttributeData att in controllerAttributes)
    {
    controllerData.fldTitle = att.AttributeType == typeof(cesTitleAttribute) ? att.ConstructorArguments[0].ToString().Replace(""", string.Empty) : string.Empty;
    controllerData.fldAuthorized = att.AttributeType == typeof(AuthorizeAttribute) ? true : false;
    controllerData.fldRoutPrefix = att.AttributeType == typeof(RoutePrefixAttribute) ? att.ConstructorArguments[0].ToString() : string.Empty;
    controllerData.fldDefaultAction = att.AttributeType == typeof(RouteAttribute) ? att.ConstructorArguments[0].Value.ToString() : string.Empty;
    controllerData.fldRoutArea = att.AttributeType == typeof(RouteAreaAttribute) ? att.ConstructorArguments[0].Value.ToString() : string.Empty;
    }
    }
    _ControllerList.Add(controllerData);


    tblPermissionController IsControllerExist =
    db.tblPermissionController.Where(c => c.fldNamespace == controllerData.fldNamespace && c.fldName == controllerData.fldName).FirstOrDefault();


    if (IsControllerExist == null)
    {
    try
    {
    db.tblPermissionController.Add(controllerData);
    db.SaveChanges();
    }
    catch (Exception)
    {
    throw;
    }
    }
    else
    {
    controllerData.fldId = IsControllerExist.fldId;
    }
    ادامه دارد...


    تا ایجا همه چیز خوب پیش میره و لیست کلاس ها ثبت میشه. کدهای بعدی که در ادامه کدهای بالا می باشد باید لیست متدهای موجود در کلاس را ذخیره کند:

                    //ایجاد لیست متدهای موجود در کنترلر جاری
    List<MethodInfo> methods = t.GetMethods().ToList();
    foreach (MethodInfo m in methods)
    {
    //فقط متدهایی که صفت سفارشی را داشته باشند در برنامه ثبت میشوند
    if (!m.CustomAttributes.Any(a => a.AttributeType == typeof(cesTitleAttribute)))
    {
    continue;
    }
    tblPermissionAction actionData = new tblPermissionAction();
    actionData.fldControllerId = controllerData.fldId;
    actionData.fldName = m.Name;
    var actionAttributes = m.CustomAttributes;
    if (actionAttributes != null)
    {
    foreach (CustomAttributeData att in actionAttributes)
    {
    //data.fldTitle =att.ConstructorArguments[0].ToString().Replace("","").Replace(""","");
    actionData.fldTitle = att.AttributeType == typeof(cesTitleAttribute) ? att.ConstructorArguments[0].ToString().Replace(""", string.Empty) : string.Empty;
    actionData.fldAuthorized = att.AttributeType == typeof(AuthorizeAttribute) ? true : false;
    actionData.fldAnonumous = att.AttributeType == typeof(AllowAnonymousAttribute) ? true : false;
    actionData.fldChildActionOnly = att.AttributeType == typeof(ChildActionOnlyAttribute) ? true : false;
    actionData.fldHttpPost = att.AttributeType == typeof(HttpPostAttribute) ? true : false;
    actionData.fldActionName = att.AttributeType == typeof(ActionNameAttribute) ? att.ConstructorArguments[0].Value.ToString() : string.Empty;
    actionData.fldRout = att.AttributeType == typeof(RouteAttribute) ? att.ConstructorArguments[0].ToString() : string.Empty;
    actionData.fldRoutName = att.AttributeType == typeof(RouteAttribute) ? att.NamedArguments[0].ToString().Split(Convert.ToChar("="))[1] : string.Empty;
    actionData.fldOutputCash = att.AttributeType == typeof(OutputCacheAttribute) ? true : false;
    }
    }
    _ActionList.Add(actionData);
    db.tblPermissionAction.Add(actionData);
    }
    }
    db.SaveChanges();



    جالبی مساله این هستش که حتی مقدار فیلد fldControllerId که در جدول Actionها هست رو بصورت دستی و معادل مقادیر از پیش ثبت شده در جدول بانک اطلاعاتی قرار میدم بازهم در زمان ثبت اطلاعات متدها، ایتدا یک ردیف خالی در جدول Controller ایجاد میکنه و از شماره ردیف جدید اون برای ثبت اطلاعات در جدول Child استفاده میکنه. اگر راهنمایی کنید ممنون میشم.
    تشکر

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

  1. error SaveChanges();
    نوشته شده توسط khorzu.khan در بخش ASP.NET MVC
    پاسخ: 2
    آخرین پست: سه شنبه 09 تیر 1394, 14:15 عصر
  2. سوال: Entity SaveChanges
    نوشته شده توسط morika در بخش C#‎‎
    پاسخ: 4
    آخرین پست: جمعه 01 فروردین 1393, 11:03 صبح
  3. علت خطای SaveChanges در فرم دوم
    نوشته شده توسط mohamad_torabi در بخش C#‎‎
    پاسخ: 6
    آخرین پست: پنج شنبه 29 اسفند 1392, 15:26 عصر
  4. سوال: خطا در متد SaveChanges
    نوشته شده توسط vira1368 در بخش دسترسی به داده ها (ADO.Net و LINQ و ...)
    پاسخ: 2
    آخرین پست: سه شنبه 25 تیر 1392, 20:28 عصر
  5. سرعت پائین در دستور SaveChanges در EF
    نوشته شده توسط spicirmkh در بخش دسترسی به داده ها (ADO.Net و LINQ و ...)
    پاسخ: 6
    آخرین پست: جمعه 22 اردیبهشت 1391, 11:55 صبح

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

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

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