我正在尝试让 CodeFirst 正常工作,但我遇到了外键和相关对象的问题。这可能是由于我不匹配“约定”并且还不了解如何正确覆盖我的设置中的约定。如果可以的话请帮忙。
我现有的数据库中有这两个表:
create table locations
(
ID int identity primary key
, name varchar(50) not null
)
create table meetings
(
ID int identity primary key
, whatever varchar(50) null
, LocationID int not null constraint FK_meetings_LocationID foreign key references locations(ID)
)
模型的设置如下:
public class Location
{
public int ID { get; set; }
public string Name { get; set; }
public virtual ICollection<Meeting> Meetings { get; set; }
}
public class Meeting
{
public int ID { get; set; }
public string Whatever{ get; set; }
public Location HeldAt { get; set; }
}
最后,我的上下文设置如下:
public class v1Context : DbContext
{
public v1Context(string ConnectionString)
: base(ConnectionString)
{}
public DbSet<Location> Locations { get; set; }
public DbSet<Meeting> Meetings { get; set; }
//protected override void OnModelCreating(DbModelBuilder modelBuilder)
//{
// modelBuilder.Entity<Location>().HasKey(k => k.ID);
// modelBuilder.Entity<Meeting>().HasKey(k => k.ID);
//}
}
而且,我收到以下错误“执行命令定义时发生错误。有关详细信息,请参阅内部异常”.. InnerExceptin 为:
InnerException = {"Invalid column name 'HeldAt_ID'."}
我尝试了各种 OnModelCreating 咒语,但没有任何成功。很明显,问题在于它不知道如何将“LocationID”FK 正确导航到带有 ID 字段的 Location 类。但我一直无法弄清楚。
不知何故,我认为由于它是“Location”类型,并且 Location 类也独立映射到数据库,并且因为数据库中存在适当的 FK 关系,所以它会“弄清楚”。
任何帮助将不胜感激。