MVC 5无法确定0..1到0..1关系的关联的主要结束

时间:2015-04-24 07:30:36

标签: entity-framework asp.net-mvc-5 ef-code-first

我在尝试创建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

为什么会出现这种错误?我不需要关系中的主要实体。他们俩都可以独自站立。

提前致谢

1 个答案:

答案 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);
}

在我的解决方案中尝试过这种方法,我可以在没有租借者的情况下播放电影,也可以在没有电影的情况下播放电影。