3

我想为餐厅制作应用程序。这是关于计算配方的。

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

配方有RecipeItem 列表。

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

所以我正在使用具有 2 个属性(Id、Name)的接口 IItem。如果我在课堂上使用接口,则数据库生成器会忽略此字段。

在这里查看我的课程:

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 将插入到成分指针中。

我想使用 FLUENT API 进行映射,但我不知道如何。

我不知道我想要的是否可能,或者是否有更好的方法来解决我的问题。

我已经在 Pluralsight 上观看了 CodeFirst 视频,并在论坛中浏览,但找不到答案。

感谢您的任何帮助。

4

2 回答 2

3

不确定是否可以,但如果可以,不要使用接口而是使用类,请尝试

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的信息

于 2013-07-24T09:02:30.470 回答
0

您需要使用 DataAnnotations 为 EF 阐明如何生成 DB 生成脚本

对于您的解决方案,我可以建议您

使用 InversProperty 和 ForeignKey 属性

看看以下资源:

https://msdn.microsoft.com/en-us/data/jj193542.aspx

https://msdn.microsoft.com/en-us/data/gg193958.aspx

于 2016-05-29T13:08:58.113 回答