Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net MVC EF代码第一个一对一关系错误_Asp.net_Asp.net Mvc_Asp.net Mvc 3_Entity Framework_Model - Fatal编程技术网

Asp.net MVC EF代码第一个一对一关系错误

Asp.net MVC EF代码第一个一对一关系错误,asp.net,asp.net-mvc,asp.net-mvc-3,entity-framework,model,Asp.net,Asp.net Mvc,Asp.net Mvc 3,Entity Framework,Model,我想要一份展台名单(在贸易展览会上)和一份参展商名单 展位列表与参展商列表是分开的-但是,一旦注册,我希望参展商能够预订展位 当他们选择/预订展位时,我希望能够在我的视图中列出展位列表,并显示已预订展位的相关参展商 同样,我想在另一个视图中列出参展商,以及他们预订的展位 所以我尝试建立一对一的关系(使用EF CodeFirst) 但是,在尝试为展台或参展商添加控制器时,我遇到以下错误: 我的模型是: public class Stand { public int StandID {

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

展位列表与参展商列表是分开的-但是,一旦注册,我希望参展商能够预订展位

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

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

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

但是,在尝试为展台或参展商添加控制器时,我遇到以下错误:

我的模型是:

 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; }

}
我确信这与模型的“虚拟”部分有关

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

谢谢,


标记

您创建的模型无法与关系数据库一起使用。
Stand
需要一个
ExibitorId
,而
Exibitor
需要一个
StandId
。循环关系不允许您向任一表插入任何行

假设一个
Exibitor
可能有多个
Stand
,将关系转换为一对多是一种选择

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 virtual ICollection<Stand> Stands { get; set; }
}
使用Fluent API配置关系

modelBuilder.Entity<Exibitor>().HasRequired(e => e.Stand)
    .WithOptional(s => s.Exibitor);
modelBuilder.Entity().HasRequired(e=>e.Stand)
.with可选(s=>s.Exibitor);

EF不知道哪个实体是主体(父实体),哪个实体是从属实体(子实体)。您需要在该实体的项上声明一个外键,该实体应位于第一位。您可以通过注释或流畅映射来实现这一点

注释

添加以下命名空间:

using System.ComponentModel.DataAnnotations.Schema;
用以下注释注释您的
展位
班级:

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; }

}
流畅映射

重写
DbContext
类中的
OnModelCreating
方法,以包括:

modelBuilder.Entity<Stand>()
    .HasOptional(s => s.Exhibitor)
    .WithRequired(e => e.Stand);
modelBuilder.Entity()
.HAS可选(s=>s.参展商)
.需要(e=>e.Stand);
modelBuilder.Entity<Stand>()
    .HasOptional(s => s.Exhibitor)
    .WithRequired(e => e.Stand);