ورود

View Full Version : WithMany و HasMany چه کاری انجام می دن



هورداد
جمعه 24 بهمن 1393, 20:46 عصر
سلام دوستان
معنی این کد چیه ؟


public class ProductConfig : EntityTypeConfiguration<Product>
{
public ProductConfig()
{
HasMany(x => x.LikedUsers).WithMany(x => x.LikedProduct).Map(x =>
{
x.ToTable("LikeUsersProducts");
x.MapLeftKey("ProductId");
x.MapRightKey("UserId");
});
}
}

این کد داره چه کار می کنه؟ WithMany و HasMany برا چین؟

اینم کلاس هایی که کد بالا بهشون نیاز داره:


public class Product
{
public Guid Id { get; set; }
public virtual string Name { get; set; }
public virtual string Summery { get; set; }
public virtual DateTime? AddedDate { get; set; }
public int Like { get; set; }
public virtual ICollection<User> LikedUsers { get; set; }
}




public class User
{
public virtual Guid Id { get; set; }
public virtual string Name { get; set; }
public virtual string LName { get; set; }
public virtual string Email { get; set; }
public virtual ICollection<Product> LikedProduct { get; set; }
}

rezaei_y
جمعه 24 بهمن 1393, 22:56 عصر
HasMany(x => x.LikedUsers).WithMany(x => x.LikedProduct).Map(x =>
{
x.ToTable("LikeUsersProducts");
x.MapLeftKey("ProductId");
x.MapRightKey("UserId");
});



یک جدول جدید ایحاد میکنه که شامل کلید های اصلی جدول کاربران و جدول محصولات
هر زمانی کاربری به محصولی امتیاز داد داخل این جدول ثبت میکنید

هورداد
شنبه 25 بهمن 1393, 07:36 صبح
یک جدول جدید ایحاد میکنه که شامل کلید های اصلی جدول کاربران و جدول محصولات
هر زمانی کاربری به محصولی امتیاز داد داخل این جدول ثبت میکنید

مرسی . اما نحوه نعریف به چه صورته در این شرایط؟
یعنی برعکس هم در جدول User ،

public virtual ICollection<Product> LikedProduct { get; set; }
و در جدول Product ،

public virtual ICollection<User> LikedUsers { get; set; }
را تعریف می کنیم؟
بر چه اساسی اینطوری می نویسیم؟

meisam12
شنبه 25 بهمن 1393, 18:52 عصر
به نظرم شما روابط را از فرزند به پدرش برقرار کنید البته عکسش هم صحیح می باشد. شما برای برقراری ارتباط یک به چند نیاز به سه متد دارید. HasRequired,WithMany,HasForeignKey در این سناریو محصولات(Product) فرزند و پدر کاربر(User) می باشد.



public class ProductConfig : EntityTypeConfiguration<Product>
{
public ProductConfig()
{
// ایجاد رابطه یا Relation بین جداول User و Product
HasRequired(r=>r.LikedProduct)
.WithMany(r=>r.LikedUsers)
.HasForeignKey(r=>r.UserId);
}
}




تابع HasRequired : این تابع فرزندان را ملزم می کنند که حتماً پدری داشته باشند در این سناریو محصولات فرزند می باشد و هر محصول حتماً یک کاربر دارد پس این تابع Product را ملزم می کند که حتماً یک User داشته باشد.
تابع WithMany : توسط این تابع فرزندان یک پدر را می توان تعیین کرد. در این سناریو User چند Product دارد.
تابع HasForeignKey : این تابع کلید خارجی رابطه را تعیین می کند.