PDA

View Full Version : ثبت اطلاعات در جدول وسط رابطه ی چند به چند در EFCodeFirst



IR-Developer
یک شنبه 30 شهریور 1393, 19:02 عصر
سلام در رابطه ی چند به چند ایجاد شده در EFCodeFirst به کمک FluentApi جدول وسط فقط در دیتابیس ایجاد میشه و ما در پروژه کلاسی برای دسترسی به متدها جهت درج اطلاعات نداریم . چطور میشه توی این نوع جدول اطلاعات درج کرد ؟

rezaei_y
دوشنبه 31 شهریور 1393, 07:08 صبح
var tag1 = new Tag { Name = "Tag1" };
context.Tags.Add(tag1);

var post1 = new BlogPost { Title = "Title...1", Body = "Body...1" };
context.BlogPosts.Add(post1);

post1.Tags.Add(tag1);//jadval vaset





بیشتر (http://www.dotnettips.info/post/1235/%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C-%D8%AA%D9%81%D8%B5%DB%8C%D9%84%DB%8C-%D8%B1%D8%A7%D8%A8%D8%B7%D9%87-many-to-many-%D8%AF%D8%B1-ef-code-first)

IR-Developer
دوشنبه 31 شهریور 1393, 11:28 صبح
توی ویندوز اپلیکیشن امتحان کردم جواب میده ولی نمیدونم چرا توی پروژه ی خودم در mvc هرکار میکنم توی جدول وسط ثبت نمیشه ولی خطایی هم نمیده !

این کدم هست :

var postitem = blpost.Find(1);

var catitem = new Categories { CatName = "qqqq" };


dbContext.Category.Add(catitem);


postitem.Categories.Add(catitem);


dbContext.SaveChanges();

IR-Developer
دوشنبه 31 شهریور 1393, 16:42 عصر
بخاطر اینکه از Repository بجای Context مستقیم استفاده میکردم درج نمیشد . دلیلش را نمیدونم ولی به روش مستقیم جواب داد .


برای من فقط به روش زیر در جدول وسط ذخیره میکنه :

var tag1 = context.tag.find(1);

var post1 = context.post.find(1);

post1.Tags.Add(tag1);//jadval vaset

context.savechanges();


به اون روشی که شما مثال زدید اصلا جواب نمیده . یعنی حتما باید فیلدها از قبل در دیتابیس ثبت شده باشه تا بشه در جدول وسط id هاشون را درج کرد ؟

شما خودتون اینطوری امتحان کردید ؟

rezaei_y
دوشنبه 31 شهریور 1393, 19:00 عصر
نه لزومی نداره حتما ثبت شده باشه

Section mySection = _sectionService.Find(SectionId);

var newFAQ = new FAQ
{
AddedDate = DateAndTime.GetDateTime(),
Question = model.Question.ToSafeHtml()

};

newFAQ.Sections = new List<Section>();
newFAQ.Sections.Add(mySection);


البته زمانی که new میکنی اگه رکوردت از قبل وجود داره حتما توسط find رکوردت رو بدست بیار وگرنه دوباره اضافه میشه