[英]EF Code First One To Many
我怎样才能让一个类拥有一个由另一个模型组成的集合,并在我获取原始模型时填充它。 我有一个愿望清单,并且该愿望清单中有 0 个或多个产品。 如果我要执行 db.Wishlist.find(id),我的数据注释或 fluent API 需要说什么才能填充它。 这是我目前在我的心愿单模型中所拥有的
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Models
{
[Table("Wishlist")]
public class Wishlist
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[ScaffoldColumn(false)]
public int ID { get; set; }
[StringLength(100)]
public string Name { get; set; }
public int ProductID { get; set; }
public virtual ICollection<Product> Product { get; set; }
public int CustomerID { get; set; }
[Required]
public Customer Customer { get; set; }
public virtual List<Product> Products { get; set; }
[DisplayFormat(DataFormatString = "{0:f}")]
public DateTime CreateDate { get; set; }
[DisplayFormat(DataFormatString = "{0:f}")]
public DateTime LastModifiedDate { get; set; }
}
}
将产品填充为集合或列表需要什么。 实现这一目标的正确方法是什么? 我知道必须去的产品系列之一,只是不确定需要哪些和什么。
更新:添加了我的产品型号的显示。
namespace Models
{
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.Spatial;
[Table("Product")]
public partial class Product
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Product()
{
OrderLines = new HashSet<OrderLine>();
SKU_Table = new HashSet<Sku>();
XREF_CatalogProduct = new HashSet<XREF_CatalogProduct>();
ProductImages = new List<ProductImage>();
}
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
[NotMapped]
public string FormattedPrice { get { return this.Price.ToString("C"); } }
[Required]
[MaxLength]
public string PageURL { get; set; }
[Required]
[StringLength(250)]
public string Name { get; set; }
[Required]
public string Code { get; set; }
public string Description { get; set; }
public int CategoryID { get; set; }
[Column(TypeName = "money")]
[DisplayFormat(DataFormatString = "${0:#,0}", ApplyFormatInEditMode = true)]
public decimal Price { get; set; }
public DateTime? DateCreated { get; set; }
public DateTime? DateModified { get; set; }
[Required]
public bool Featured { get; set; }
public virtual string ImagePath { get; set; }
public virtual Category Category { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<OrderLine> OrderLines { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Sku> SKU_Table { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<XREF_CatalogProduct> XREF_CatalogProduct { get; set; }
public virtual ICollection<ProductImage> ProductImages { get; set; }
}
}
如果您使用DataAnnotation
您必须与Wishlist : Product
建立M: M
关系。Code first 将为您创建一个Junction table
。
[Table("Wishlist")]
public class Wishlist
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[ScaffoldColumn(false)]
public int ID { get; set; }
[StringLength(100)]
public string Name { get; set; }
public int CustomerID { get; set; }
[Required]
public Customer Customer { get; set; }
[DisplayFormat(DataFormatString = "{0:f}")]
public DateTime CreateDate { get; set; }
[DisplayFormat(DataFormatString = "{0:f}")]
public DateTime LastModifiedDate { get; set; }
public virtual ICollection<Product> Products { get; set; }
}
和
[Table("Product")]
public partial class Product
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Product()
{
OrderLines = new HashSet<OrderLine>();
SKU_Table = new HashSet<Sku>();
XREF_CatalogProduct = new HashSet<XREF_CatalogProduct>();
ProductImages = new List<ProductImage>();
this.Wishlists = new HashSet<Wishlist>();
}
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
[NotMapped]
public string FormattedPrice { get { return this.Price.ToString("C"); } }
[Required]
[MaxLength]
public string PageURL { get; set; }
[Required]
[StringLength(250)]
public string Name { get; set; }
[Required]
public string Code { get; set; }
public string Description { get; set; }
public int CategoryID { get; set; }
[Column(TypeName = "money")]
[DisplayFormat(DataFormatString = "${0:#,0}", ApplyFormatInEditMode = true)]
public decimal Price { get; set; }
public DateTime? DateCreated { get; set; }
public DateTime? DateModified { get; set; }
[Required]
public bool Featured { get; set; }
public virtual string ImagePath { get; set; }
public virtual Category Category { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<OrderLine> OrderLines { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Sku> SKU_Table { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<XREF_CatalogProduct> XREF_CatalogProduct { get; set; }
public virtual ICollection<ProductImage> ProductImages { get; set; }
public virtual ICollection<Wishlist> Wishlists { get; set; }
}
EF 查询:根据product Id
检索wishlist
var prod_id=1; // your product id
var query= from wishlist in db.Wishlists
where wishlist.Products.Any(c=>c.Product_ID== prod_id)
select wishlist;
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Wishlist>()
.HasMany<Product>(s => s.Products)
.WithMany(c => c.Wishlists)
.Map(cs =>
{
cs.MapLeftKey("WishlistRefId");
cs.MapRightKey("ProductRefId");
cs.ToTable("WishlistProduct");
});
}
EF 查询:根据product Id
检索wishlist
var prod_id=1; // your product id
var query= from wishlist in db.Wishlists
where wishlist.Products.Any(c=>c.ProductRefId == prod_id)
select wishlist;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.