[英]One to one relationship in Entity Framework 5.0 Code First Approach
[英]Entity Framework 5.0 code first one to one and one to many relationship
我有兩個實體 - 產品和圖片 。 這個想法是產品只能有一張圖片或者沒有圖片,而且圖片可以映射到許多產品。
public class Product
{
public int Id {get; set;}
public Picture Picture { get; set; }
public bool Enabled { get; set; }
public string Text { get; set; }
}
圖片實體是到包含所有圖片的另一個圖片實體的映射(此圖片實體僅包含產品圖片的映射),因此基本上它只包含兩個帶有ID的列。
public class Picture
{
public int Id {get; set;}
public int PictureId { get; set; }
}
這是我的Product實體的模型綁定器
modelBuilder.Entity<Product>().HasOptional<Picture>(pr => pr.Picture);
當我創建帶有圖片的Product實體,或者將圖片添加到現有實體時,在Product表中創建的Picture_Id列使用Picture表中的Id正確填充。 問題是當我嘗試檢索產品時 。 Product實體內的Picture實體為null。 我懷疑映射是不正確的。 你能告訴我如何在檢索它時在Product實體中填充Picture實體。 這是檢索代碼:
public Product GetProductById(int productId)
{
var query = from pr in _productRepository.Table
where pr.Id == productId
select pr;
return query.FirstOrDefault();
}
編輯:我使用自定義IRepository服務,我包含依賴注入
IRepository<Product>
IRepository接口包含以下方法:
void Insert(T entity);
void Update(T entity);
void Delete(T entity);
IQueryable<T> Table { get; }
這是表的實現:
public virtual IQueryable<T> Table
{
get
{
return this.Entities;
}
}
private IDbSet<T> Entities
{
get
{
if (_entities == null)
_entities = _context.Set<T>();
return _entities;
}
}
我無法在表中添加.Include(“Picture”) ,因為它是IQueryable 。 我也啟用了延遲加載,但沒有結果。
var products = db.Pictures.Include("Product");
public Product GetProductById(int productId)
{
var query = from pr in products
where pr.Id == productId
select pr;
return query.FirstOrDefault();
}
你應該使用include來加載相關的實體:
public Product GetProductById(int productId)
{
using (var db = new ProductContext())
{
var query = from pr in db.Products.Include("Picture")
where pr.Id == productId
select pr;
return query.FirstOrDefault();
}
}
我解決了這個問題。 不確定這是否是正確的方法,但它確實有效。
我做了以下更改:
public class Product
{
public int? PictureId { get; set; }
public int Id {get; set;}
public Picture Picture { get; set; }
public bool Enabled { get; set; }
public string Text { get; set; }
}
modelBuilder.Entity<Product>().HasOptional<Picture>(pr => pr.Picture).WithMany().HasForeignKey(pr => pr .PictureId);
public Product GetProductById(int productId)
{
var query = from pr in _productRepository.Table
where pr.Id == productId
select pr;
var product = query.FirstOrDefault();
AddProductPicture(product);
return product;
}
private void AddProductPicture(Product product)
{
var query = from pic in _pictureRepository.Table
where pic.Id == product.PictureId
select pic;
product.Picture = query.FirstOrDefault();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.