实体框架代码优先-接口
本文关键字:接口 框架 代码 实体 | 更新日期: 2023-09-27 18:24:33
我想为餐厅制作应用程序。这是关于计算配方的。
我有域类:-成分-配方-配方项目
配方有配方项目列表。
RecipeItem可以是Ingredient,也可以是Recipe。
所以我使用的接口IItem有两个属性(Id,Name)。如果我在类中使用Interface,那么db生成器将忽略此字段。
看看我的课程:
public class Ingredient : IItem
{
public int Id { get; set; }
public string Name { get; set; }
public double Price { get; set; }
}
public class Recipe : IItem
{
public int Id { get; set; }
public string Name { get; set; }
public List<RecipeItem> RecipeItems { get; set; }
}
public class RecipeItem
{
public int Id { get; set; }
public IItem Item { get; set; }
public double Quantity { get; set; }
}
CodeFirst使用上面的表自动为我生成数据库。
我想有数据库表RecipeItem看起来像:
> Id
> Quantity
> Recipe_Id - FK of Recipe ID
> RecipePointer - Nullable FK of specific Recipe
> IngredientPointer - Nullable FK of specific Ingredient
但只有:
> Id
> Quantity
> Recipe_Id - FK of Recipe ID
如果我放入RecipeItem,例如Ingredient,则IngredientPointer将插入IngredientId。
我想使用FLUENT API进行映射,但我不知道怎么做。
我不知道我想要什么是可能的,或者是否有更好的方法来解决我的问题。
我已经在Pluralsight上看了CodeFirst视频,我在论坛上浏览,但我找不到答案。
谢谢你的帮助。
不确定是否可以,但如果可以,请不要使用接口,而是使用类,请尝试
public class Item
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Ingredient : Item
{
public double Price { get; set; }
}
public class Recipe : Item
{
public List<RecipeItem> RecipeItems { get; set; }
}
public class RecipeItem
{
public int Id { get; set; }
public Item Item { get; set; }
public double Quantity { get; set; }
}
然后您可能想了解EF和TPH
您需要使用DataAnnotations为EF澄清如何生成DB生成脚本
对于您的解决方案,我可以向您推荐
使用InversProperty和ForeignKey属性
查看以下资源:
https://msdn.microsoft.com/en-us/data/jj193542.aspx
https://msdn.microsoft.com/en-us/data/gg193958.aspx