چگونگی وارد کردن اطلاعات در جداولی که ارتباط چند به چند دارند
سلام
خسته نباشید
من خودم ASP.NET MVC رو شروع کردم میخوام بخونم
اما کمک هیچ کسی رو به جز شما ندارم
من میخواستم یک ارتباط چند به چند رو پیاده کنم
اما خطا میده فکر کنم به خاطر اینکه هنوز مقداری برای پراپرتی User در کلاس Group ندادم این خطا به خاطر اونه اما من lazyloading رو True کردم و قبل از نام پراپرتی از کلمه virtual استفاده کردم
واقعا نمیدونم مشکل چیه
خواهشا کد من رو بررسی کنید و کد دیگه و یا راه حل دیگه نمیخوام. ممنون
اینم سورس کد من:
من میخوام ارتباط چند به چند رو بررسی کنم برای همین 2 تا جدول user و Group ایجاد کردم و بعد گروههایی رو از طریق پراپرتی Group که مربوط به جدول user است میخوام اضافه کنم که خطا میده مقدار آبجکت set نشده
من 3 تا کلاس ایجاد کردم یکیش که مربوط به پایگاه داده است
کلاس MyDB
کلاس User
کلاس Group
کلاس myDB:
using System;using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.Entity;
namespace WindowsFormsApplication2.Models
{
class MyDB:DbContext
{
static MyDB()
{
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<MyDB>());
}
public MyDB()
{
Configuration.LazyLoadingEnabled = true;
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Configurations.Add(new Group.Config());
}
public virtual DbSet<Group> Groups { get; set; }
public virtual DbSet<User> Users { get; set; }
}
}
کلاس User:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WindowsFormsApplication2.Models
{
class User
{
public User()
{
ID = System.Guid.NewGuid();
}
public System.Guid ID { get; set; }
public string Name { get; set; }
public virtual IList<Group> Groups { get; set; }
}
}
کلاس Group:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WindowsFormsApplication2.Models
{
class Group
{
internal class Config:System.Data.Entity.ModelConfiguration.Entit yTypeConfiguration<Group>
{
public Config()
{
HasMany(c => c.Users).WithMany(u => u.Groups).Map(c=>{
c.ToTable("UserGroup");
c.MapLeftKey("GroupId");
c.MapRightKey("UserId");
});
}
}
public Group()
{
ID = System.Guid.NewGuid();
}
public System.Guid ID { get; set; }
public string Name { get; set; }
public virtual IList<User> Users { get; set; }
}
}
و در رویداد کلیک دکمهای بعد از دادن مقادیر به user و group از طریق پراپرتی Group مربوط به user خواستم گروه ها رو اضافه کنم اینم کد:
using System;using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using WindowsFormsApplication2.Models;
namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnAddNewRecord_Click(object sender, EventArgs e)
{
MyDB oMyDB = null;
try
{
oMyDB = new MyDB();
Group oGroup = null;
User oUser = null;
oGroup = new Group();
oGroup.Name = "Group 1";
oMyDB.Groups.Add(oGroup);
oGroup = new Group();
oGroup.Name = "Group 2";
oMyDB.Groups.Add(oGroup);
oGroup = new Group();
oGroup.Name = "Group 3";
oMyDB.Groups.Add(oGroup);
oUser = new User();
oUser.Name = "User 1";
oMyDB.Users.Add(oUser);
oUser = new User();
oUser.Name = "User 2";
oMyDB.Users.Add(oUser);
oMyDB.SaveChanges();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
if (oMyDB!=null)
{
oMyDB.Dispose();
oMyDB = null;
}
}
}
private void btnAddGroupUser_Click(object sender, EventArgs e)
{
MyDB oMyDB = null;
try
{
Group oGroup1 = oMyDB.Groups.Where(c => c.Name == "Group 1").FirstOrDefault();
Group oGroup2 = oMyDB.Groups.Where(c => c.Name == "Group 2").FirstOrDefault();
User oUser1 = oMyDB.Users.Where(u => u.Name == "User 1").FirstOrDefault();
oUser1.Groups.Add(oGroup1);
oUser1.Groups.Add(oGroup2);
oMyDB.SaveChanges();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
if (oMyDB!=null)
{
oMyDB.Dispose();
oMyDB = null;
}
}
}
}
}
من
نقل قول: چگونگی وارد کردن اطلاعات در جداولی که ارتباط چند به چند دارند
الان این mvc هست؟ خطایی که میده رو بگذارید و کدوم خط خطا داره؟. شاید لازم باشه به هر گروهی آیدی یوزر مورد نظرش رو بدید و ست کنید.
نقل قول: چگونگی وارد کردن اطلاعات در جداولی که ارتباط چند به چند دارند
نقل قول:
الان این mvc هست؟ خطایی که میده رو بگذارید و کدوم خط خطا داره؟. شاید لازم باشه به هر گروهی آیدی یوزر مورد نظرش رو بدید و ست کنید.
چون باید Entity framework هم بلد میشدم من این کد را در windows form Application نوشتم
عین این کد رو استاد داریوش تصدیقی هم نوشته ولی مال اون اجرا میشه ولی مال من خطا میده خیلی عجیبه من کدهای ایشون رو عینا کپی کردم اما نشد حتی اطلاعاتی که ایشون وارد کرده من هم وارد میکنم.
خطا:
object refrence not set to as instance of an object
نقل قول: چگونگی وارد کردن اطلاعات در جداولی که ارتباط چند به چند دارند
میشه بگید کدوم خط؟ این ارور اروری هست که شما باید تریس کنید ببینید چه آبجکتی نال هست . روی خطی که ارور دارید F9 بزنید سپس اجرا کنید و قتی به اون خط رسید ببینید چه آبجکتی نال هست
نقل قول: چگونگی وارد کردن اطلاعات در جداولی که ارتباط چند به چند دارند
شما باید توی ایونت کلیک btnAddGroupUser_Click ابجکت databasecontext که توی کد شما همون MyDB هستش رو بعد از try نیو کنین که اینکارو نکردین
نقل قول: چگونگی وارد کردن اطلاعات در جداولی که ارتباط چند به چند دارند
دوست عزیز اگر مشکلت با راه حل دوستان حل نشد بگید
نقل قول: چگونگی وارد کردن اطلاعات در جداولی که ارتباط چند به چند دارند
نقل قول:
نوشته شده توسط
a.golzar66
دوست عزیز اگر مشکلت حل با راه حل دوستان حل نشد بگید
سلام
حل نشد
من قبلا اون رو درست کرده بودم یعنی داخل try نیوش کرده بودم اما حل نشد
نقل قول: چگونگی وارد کردن اطلاعات در جداولی که ارتباط چند به چند دارند
کلاس های group و user و myDB رو قبل عنوان کلاس یه کلمه public بزار ببین درست میشه
نقل قول: چگونگی وارد کردن اطلاعات در جداولی که ارتباط چند به چند دارند
سلام. چرا از junction استفاده نکردید؟؟!!
نقل قول: چگونگی وارد کردن اطلاعات در جداولی که ارتباط چند به چند دارند
نقل قول:
کلاس های group و user و myDB رو قبل عنوان کلاس یه کلمه public بزار ببین درست میشه
مرسی مشکلم با این روش حل شد.