编程语言
首页 > 编程语言> > c#-实体框架代码优先-接口

c#-实体框架代码优先-接口

作者:互联网

我想为餐厅制作应用程序.关于计算配方.

我有域类:
-成分
– 食谱
-RecipeItem

配方具有RecipeItem列表.

RecipeItem可以是成分,也可以是配方.

所以我正在使用具有2个属性(Id,名称)的Interface IItem.
如果我在课堂上使用Interface,则db generator会忽略此字段.

在这里查看我的课程:

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例如放入成分,则成分ID将插入到IngredientPointer.

我想使用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 and TPH

标签:ef-code-first,interface,code-first,c,entity-framework
来源: https://codeday.me/bug/20191123/2064154.html