سلام
خسته نباشید
من خودم 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;
}
}
}
}
}
من