مشکل در گرفتن داده از دیتابیس با Entity Framework
سلام. یک دیتابیس با entity framework code first ایجاد کردم و دو تا از جدول ها به اسم Product و Sell وجود داره که رابطه یک چند دارن. وقتی میخوام به داده های جدول Sell که کلید خارجی به یک فیلد خاص در Product دارن رو دریافت بکنم مقدار null رو برمیگردونه. دقیقا از این کد ایراد میگیره و میگه value can not be null.
context.Products.Where(x => x.Id == product_id).First().Sells.ToList()[0].Payment.ToString()
در حالی که کلی داده توی دیتابیس هست، و به راحتی داده های دارای کلید خارجی به یک فیلد خاص از product رو داخل لیست ویو نشون میدم ولی این مشکل وجود داره. داخل wpf این کار رو انجام میدم.
11 پاسخ
این کد باید داخل OnModelCreating باشه؟
modelBuilder.Entity<Sell>().HasRequired<Product>(x=>x.Product).WithMany(x=>x.Sells);
اینها جواب نداد. ولی مهندس احمدی توی ویدئو هاشون اشاره ای نکردن به این موضوع. فقط گفتن اگه اون دو پروپرتی که توی مدل ها نوشتم تا ارتباط داشته باشن رو بنویسیم انتیتی فریم ورک اتوماتیک تشخیص میده و ارتباط رو ایجاد میکنه.
من قبلا توی پروژه های دیگه این کد هارو نوشتم و بدون مشکل کار کرده. همه ی کد هارو با پروژه های قبلی مطابقت دادم ولی نمیدونم مشکل کجاست.
توی جدول sell خود انتیتی فیلد Product_FK رو ایجاد کرده. دستی هم گذاشتم خودم ولی باز حل نشد.
سلام این کد رو امتحان کنید البته کد شما هم باید درست کار کنه
context.Products.First(c => c.Id == product_id).Sells.ToList()[0].Payment.ToString();
class Product { public int Id { get; set; } public string Name { get; set; } public Int64 Price { get; set; } public string Brand { get; set; } public string Group { get; set; } public virtual ICollection<Sell> Sells { get; set; } }
این جدول product بود. و جدول sell:
public int Id { get; set; } public Int64 Payment { get; set; } public int Number { get; set; } public DateTime Date { get; set; } public virtual Product Product { get; set; }
این هایی که نوشتید مدل های شما هستند. ولی شما map نکردید. بخش مپ رو هم باید بنویسید. برای نوشتن بخش مپ توی متد OnModelCreating باید مشخص کنید که دو جدول شما با هم ارتباط optional یا required دارند یا خیر و این که یک به چند هستند.
سلام به شما دوست عزیز
بدون شرط مساوی بودن id هم خطا میگیرید؟
modelBuilder.Entity<Sell>().HasOptional(x=>x.Product).WithMany(x=>x.Sells);
این کد رو قرار دادم توی OnModelCreating. ولی هنوز همون مشکل هست و Sell های Product رو null برمیگردونه.
کلید خارجی هم براش توی جدول product بذارید
فکر می کنم قسمت مپ هایی که نوشته اید مشکل داره و ارتباطات جدول هاتون با هم درست نیست. اگه ممکنه اون بخش مپ جداول رو بذارید.
مهندس تا اونجا درسته و Product مورد نظر رو پیدا میکنه. ولی Sell های مرتبت با اون رو null بر میگردونه.