EF4间接导航场
本文关键字:导航 EF4 | 更新日期: 2023-09-27 18:15:25
我想知道是否有可能在一个直接从数据库填充的类中有一个属性/字段。我知道直接实现它会破坏设计模式,例如关注点分离,但我希望在DbContext
的OnModelCreating
函数中有一些配置。
在下面的例子中,给定一个Product
,我想找出它出现在哪个PriceTables
上:
public class PriceTable
{
public int ID { get; set; }
public HashSet<Price> Prices { get; set; }
public PriceTable()
{
Prices = new HashSet<Price>();
}
}
public class Price
{
public int ID { get; set; }
public double Value { get; set; }
public int ProductID { get; set; }
public virtual Product Product { get; set; }
public int PriceTableID { get; set; }
public virtual PriceTable PriceTable { get; set; }
}
public class Product
{
public int ID { get; set; }
public String Name { get; set; }
// This is what I'd like to achieve
/*
public HashSet<PriceTable> PriceTables {
get {
// and here, return something from the DB
}
}
*/
}
只是澄清一下:我的模型是而不是下面的,但它以相同的方式工作(因此我需要这种类分离,使用这个"连接表")。
我可以使用LINQ找到我想要的信息:
from p in Prices
where p.Product.ID == MY_PRODUCT_ID
select p.PriceTable
这意味着这是查询我想嵌入在我的Product
类!提前感谢!
我通过更改模型来匹配以下内容(使用注释描述的更改)来完成我的目标:
public class PriceTable
{
public int ID { get; set; }
public HashSet<Price> Prices { get; set; }
// New field, which allows me to query "all the Products in some PriceTable"
public IEnumerable<Product> Products
{
get
{
return Prices.Select(p => p.Product);
}
}
public PriceTable()
{
Prices = new HashSet<Price>();
}
}
public class Price
{
public int ID { get; set; }
public double Value { get; set; }
public int ProductID { get; set; }
public virtual Product Product { get; set; }
public int PriceTableID { get; set; }
public virtual PriceTable PriceTable { get; set; }
}
public class Product
{
public int ID { get; set; }
public String Name { get; set; }
// New field, previsouly automatically generated by EF4
public HashSet<Price> Prices { get; set; }
// New field, which allows me to query "all the PriceTables on which a Product appears"
public IEnumerable<PriceTable> PriceTables
{
get
{
return Prices.Select(p => p.PriceTables);
}
}
}