PDA

View Full Version : ذخیره ارتباط چند به چند



biggrin
دوشنبه 20 مرداد 1393, 09:23 صبح
سلام امیدوارم حالتون حوب باشه.
من دو مودل به صورت زیر دارم


public class book {


public book()
{
Authors = new List<Auhtor>();
}


public int Id { get; set; }


public string Name { get; set; }


public ICollection<Auhtor> Authors { get; set; }
}


public class Auhtor {
public Auhtor()
{
Books = new List<book>();
}


public int Id { get; set; }


public string Name { get; set; }


public ICollection<book> Books { get; set; }
}



می خواستم در view کتاب بتوانم نام چندین نویسنده را وارد کنم و بعد ذخیره کنم.
همچین برای یک نوسنده بتوانم نام چندین کتاب را وارد کنم.
لطفا راهنمایی کنین بهترین فرمی که می توانم برای این موضوع طراحی کنم به چه صورت است که خود model ارسالی از فرم لیست book.authors را پر کند.

hakim22
دوشنبه 20 مرداد 1393, 11:38 صبح
اگر بخواهیم نرمال سازی را هم رعایت کنیم شما نیاز به یک جدول سوم دارید که آی دی کتاب و آدی نویسنده را در کنارهم ذخیره کنید. و چون هر دو این ستونها ممکن است مقادیر تکراری باشند شما ستون ID مستقلی هم نیاز دارید.

Cybersilent
سه شنبه 21 مرداد 1393, 09:26 صبح
اگر بخواهیم نرمال سازی را هم رعایت کنیم شما نیاز به یک جدول سوم دارید که آی دی کتاب و آدی نویسنده را در کنارهم ذخیره کنید. و چون هر دو این ستونها ممکن است مقادیر تکراری باشند شما ستون ID مستقلی هم نیاز دارید.
منظورتون از جدول سوم، همان جدولی نیست که هنگام ایجاد رابطه چند به چند به صورت اتوماتیک توسط خود EF تشکیل میشه؟!
در این صورت مدل ایشان نرمال هست و نیازی به تغییر ندارد.

biggrin
سه شنبه 21 مرداد 1393, 13:07 عصر
با تشکر از وقتی که دوستان برای جواب گذاشتین.
با توجه به کدی قرار دادم ،خود Ef Code First جدول سوم را تشکیل می دهد (Junction table)و از نظر نرمال سازی مشکلی ندارد.
اولین راه حل و ساده ترین راه حل قرار دادن یک تکسباکس در view کتاب ها می باشد.که نام نویسندگان را وارد کرده و در کنترلر به صورت رشته دریافت کنیم و در نویسندگان کتاب وارد کنیم.
اما راه حلی که من دنبالش هستم اینه که وقتی اطلاعات از view ارسال می شود یعنی یک نمونه از شی کتاب ارسال می شود شامل نویسندگان باشد یعنی در کنترلر به صورت زیر باشد.

Book.Auhtors

Cybersilent
سه شنبه 21 مرداد 1393, 17:53 عصر
شما باید فیلد های input روی فرم رو به صورت همنام و به فرمت name='author[0].name' وارد نمایید، بدین صورت مدل بایندینگ mvc این اشیا رو در یک آرایه قرار داده و سمت سرور هم می تونید ازشون استفاده کنید.

biggrin
چهارشنبه 22 مرداد 1393, 08:02 صبح
باتشکر از جوابتون.امکانش هست با همین model های من برام مثالی upload کنید؟