MVC 4实体框架用户配置文件上的可选外键

本文关键字:配置文件 实体 框架 用户 MVC | 更新日期: 2023-09-27 18:12:01

在我的User模型中,我需要一个对活动播放列表的可选约束。

public class User
{
    //.. Properties
    public int? ActivePlaylistID { get; set; }
    public virtual Playlist ActivePlaylist { get; set; }
}

在我的数据库中,我有activeplaylistd设置为可空的关系建立为:' activeplaylistd '是表'播放列表',列'ID'上的外键。

在我的播放列表模型我有:

public class Playlist : BaseModel
{
    //.. Properties
    public int CreatedByUserID { get; set; }
    public virtual User CreatedByUser { get; set; }
}

在保存新播放列表之前,在我的数据库中建立了CreatedByUserID关系,并在我的控制器中设置了model属性。

在安装过程中,我得到以下错误:

Unable to determine the principal end of an association between the types 'SyncFinder.Models.Playlist' and 'SyncFinder.Models.User'. 
The principal end of this association must be explicitly configured using either the relationship fluent API or data annotations.

所以在我的DbEntity中,我添加了以下内容到我的模型生成器:

modelBuilder.Entity<User>()
    .HasOptional(x => x.ActivePlaylist)
    .WithRequired(x => x.CreatedByUser);

此时视图加载,但当尝试添加一个新的播放列表到我的数据库时,我得到:

A dependent property in a ReferentialConstraint is mapped to a store-generated column. Column: 'ID'.

我不确定如何解决这个约束问题和堆栈跟踪没有提供太多的细节,除了操作失败时,试图保存播放列表存储库

MVC 4实体框架用户配置文件上的可选外键

在模型绑定器中只绑定了关系的一半。我不确定实体框架中对一对一关系的完全支持,但对于您的示例,完成关系应该工作

modelBuilder.Entity<Playlist>().HasKey(e => e.CreatedByUserID);
modelBuilder.Entity<User>()
 .HasOptional(x => x.ActivePlaylist)
 .WithRequired(x => x.CreatedByUser);