MVC EF Code首先一对一关系错误

Mar*_*ark 4 asp.net asp.net-mvc entity-framework model asp.net-mvc-3

我想要一份展台清单(在贸易展览会上)和参展商名单.

展台名单与参展商名单分开 - 但是,一旦注册,我希望参展商能够预订展位.

当他们选择/预订展台时 - 我希望能够在我的视图中列出展台,并展示已预订展台的相关参展商.

同样,我想在另一个视图中列出参展商,以及他们预订的展位.

所以我正在尝试建立一对一的关系(使用EF CodeFirst).

但是,当试图为Stand或Exhibitor添加控制器时,我收到以下错误:

在此输入图像描述

我的模特是:

 public class Stand
{
    public int StandID { get; set; }
    public string Description { get; set; }
    public bool Booked { get; set; }
    public int ExhibitorID { get; set; }
    public virtual Exhibitor Exhibitor { get; set; }

}

 public class Exhibitor
{
    public int ExhibitorID { get; set; }
    public string Company { get; set; }
    public int StandID { get; set; }
    public virtual Stand Stand { get; set; }

}
Run Code Online (Sandbox Code Playgroud)

我确定这与模型的"虚拟"部分有关.

任何人都可以帮助指出应该更新什么,以允许连接?

谢谢,

标记

Joe*_*ari 5

EF不知道哪个实体是主体(父),哪个是依赖(子).您需要在应该首先出现的实体的项目上声明外键.您可以使用注释或流畅的映射来完成此操作.

注解

添加以下命名空间:

using System.ComponentModel.DataAnnotations.Schema;
Run Code Online (Sandbox Code Playgroud)

Stand使用以下注释为您的类添加注释:

public class Stand
{
    [ForeignKey("Exhibitor")]
    public int StandID { get; set; }
    public string Description { get; set; }
    public bool Booked { get; set; }
    public int ExhibitorID { get; set; }
    public virtual Exhibitor Exhibitor { get; set; }

}
Run Code Online (Sandbox Code Playgroud)

流畅的映射

覆盖您班级中的OnModelCreating方法,DbContext包括:

modelBuilder.Entity<Stand>()
    .HasOptional(s => s.Exhibitor)
    .WithRequired(e => e.Stand);
Run Code Online (Sandbox Code Playgroud)