我在尝试创建0..1到0..1的关系时遇到问题
首先在扩展applicationuser类的AspNetUsers
表和MovieModel之间使用代码。
这种关系的本质是用户可以租一部电影而不是
电影可以租给一个租房者。每个实体都可以独立存在
当没有租借或租借的电影时,外国字段只是nulls
我的模特:
public class MovieModel
{
[Key]
public int MovieId { get; set; }
[Required]
[StringLength(50)]
[Column(TypeName="varchar")]
[Display(Name = "Movie Name")]
public string MovieName { get; set; }
[Display(Name = "Release Year")]
public string RenterId { get; set; }
[ForeignKey("RenterId")]
public virtual ApplicationUser Renter { get; set; }
ApplicationUser Class
public class ApplicationUser : IdentityUser
{
public int? MovieId { get; set; }
[ForeignKey("MovieId")]
public virtual MovieModel Movie{ get; set; }
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
{
// Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
// Add custom user claims here
return userIdentity;
}
}
逻辑上它应该有效。有两个外键。 ApplicationUser
类中的一个外键(AspNetUser表)和MovieModel
中的一个外键
不知何故,我在添加迁移时遇到此错误:Unable to determine the principal end of an association between the types 'VideoLibrary.Models.ApplicationUser' and 'VideoLibrary.Models.MovieModel'. The principal end of this association must be explicitly configured using either the relationship fluent API or data annotation
为什么会出现这种错误?我不需要关系中的主要实体。他们俩都可以独自站立。
提前致谢
答案 0 :(得分:1)
EF Code First支持1:1和1:0..1关系。也许你应该尝试“一到零或一”。
我删除了数据注释,并由模型构建器创建。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<AllesVersUser>()
.HasOptional<MovieModel>(l => l.Movie)
.WithOptionalDependent(c => c.Renter)
.Map(p => p.MapKey("MovieId"));
base.OnModelCreating(modelBuilder);
}
在我的解决方案中尝试过这种方法,我可以在没有租借者的情况下播放电影,也可以在没有电影的情况下播放电影。