MVC / EF处理0..1关系的最佳方式

时间:2017-01-04 17:38:34

标签: asp.net-mvc database entity-framework

我希望有人可以通过MVC / EF为我提供与实体之间的0..1关系相关的内容。

在我的[假设]数据库中,我有一张颜色表和一张水果表。我还有一个查找表,用于管理颜色和水果之间的关系,如下所示

颜色

ID    Name
1      Red
2      Green
3      Yellow

水果

ID   Name
1     Banana
2     Strawberry

查找

ColourId   FruitId
1            2
3            1

假设我想使用MVC视图在表中显示此信息,并希望它看起来如下:

Colour    Fruit
 Red    Strawberry
 Green    NULL
 Yellow   Banana

我可以将上面的代表表示为MVC中的模型,然后创建一个包含模型的视图模型:

public class FruitViewModel
{
    public List<Colour> colours {get;set;}
    public List<Fruit> fruits {get;set}
}

我从哪里开始?我会为水果颜色创建第三个模型并将其添加到视图模型中吗?这包括一个NULL水果吗?

1 个答案:

答案 0 :(得分:1)

您不需要为交叉引用(查找)表创建模型。

这些都是您的模型所需要的:

public class Fruit
{
    public int Id { get; set; }
    public int ColorId { get; set; }
    public Color Color { get; set; }
}

public class Color
{
    public int Id { get; set; }
    public int? FruitId { get; set; }
    public Fruit Fruit { get; set; }
}

然后,根据您的映射方式(FluentApi与数据属性),您只需在那里建立关系。

例如,在您的水果配置中:

HasRequired(f => f.Color)
    .WithOptional(c => c.Fruit)
    .Map(f => 
        {
            f.ToTable("Lookup");
            f.MapLeftKey("ColorId");
            f.MapRightKey("FruitId");
        });