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