我在外键上遇到了问题。
我想要的是,每个视频模型都有一个配置文件模型链接
一个例子如下:
public class VideoModels
{
[Required]
public int Id { get; set; }
public ProfileModels Profile { get; set; }
}
在ProfileModels中
public class ProfileModels
{
[Required]
public int Id { get; set; }
public string Title { get; set; }
}
技术上不应该与VideoModel的VideoModels有任何关联依赖于ProfileModels,并且可以有0到多个关系。
所以在我测试之后,我的VideoModels有一个Profile_Id参数,它是来自ProfileModels的外键
但是在创建一个对象并检索它之后,它返回NULL,但是当我检查数据库时,存在一个现有的外键ID。
请帮忙,现在坚持几个小时
答案 0 :(得分:4)
没关系,我只是忘了把外键作为virtual
。
public class VideoModels
{
[Required]
public int Id { get; set; }
public virtual ProfileModels Profile { get; set; }
}
答案 1 :(得分:4)
Profile
, LazyLoading
在此处为空。这允许我们拥有一个具有许多不同对象的对象,这些对象仅在需要时加载,而不是在加载父对象时加载。如果您将“注释”属性作为用户的一部分,则此功能尤其有用。如果没有LazyLoading
,只要您想抓住VideoModels.ID
,就会加载评论集。 LazyLoading
的缺点是每次执行导航都需要对数据源进行单独查询。
要允许LazyLoading,您需要将相关对象属性标记为虚拟。
此外,您必须在上下文中提供导航属性:
public class Database : DbContext {
public DbSet<VideoModels> People { get; set; }
public DbSet<ProfileModels> PersonDetails { get; set; }
}
或强>
如果您想使用当前的班级建模,可以通过禁用LazyLoading
来实现此目的。
this.Configuration.LazyLoadingEnabled = false;