【发布时间】:2015-09-09 06:15:21
【问题描述】:
在我的用户模型中,我需要一个对活动播放列表的可选约束。
public class User
{
//.. Properties
public int? ActivePlaylistID { get; set; }
public virtual Playlist ActivePlaylist { get; set; }
}
在我的数据库中,我将 ActivePlaylistID 设置为可为空,并建立以下关系:“ActivePlaylistID”是表“播放列表”、“ID”列上的外键。
在我的播放列表模型中,我有:
public class Playlist : BaseModel
{
//.. Properties
public int CreatedByUserID { get; set; }
public virtual User CreatedByUser { get; set; }
}
CreatedByUserID 关系在我的数据库中建立,模型属性在我的控制器中设置,然后保存新的播放列表。
此时我在设置中收到以下错误:
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'.
我不确定如何解决此约束问题,并且堆栈跟踪没有提供太多详细信息,只是在尝试保存播放列表存储库时操作失败。
【问题讨论】:
-
EF 不喜欢 1-1 关系。它想要一个 1-many。
-
似乎应该能够处理。我想这是很多项目的要求,如果不是全部的话。
-
你可以试试
modelBuilder.Entity<Playlist>().HasKey(e => e.CreatedByUserID);除了你所展示的。不过,我不确定 EF 在 1-1 的比赛中表现是否良好。 -
哇,我认为它做到了!我需要做一些广泛的测试,但目前它似乎已经修复了。非常感谢,你是个巫师 :)
标签: c# sql-server asp.net-mvc entity-framework