【问题标题】:How to insert values into virtual fields如何将值插入虚拟字段
【发布时间】:2015-08-30 21:52:34
【问题描述】:

我有一个学习者表,我在 AccountController 中为用户注册“Register(RegisterViewModel model)”设置了值。

 if (result.Succeeded)
            {
                await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false);


                using (The_FactoryDBContext db = new The_FactoryDBContext())
                    {
                        Learner learner = new Learner();

                        learner.learnerID = User.Identity.GetUserId();
                        learner.llCounter = 0;
                        learner.dtwCounter = 0;
                        learner.ftwCounter = 0;
                        learner.counter = 0;

                        db.Learners.Add(learner);
                        db.SaveChanges();
                    }
                }
       }

这就是我的学习者自动生成的类与一些虚拟字段的外观。

public partial class Learner
{
    public Learner()
    {
        this.Learner_Treasure = new HashSet<Learner_Treasure>();
    }

    public string learnerID { get; set; }
    public int llCounter { get; set; }
    public int dtwCounter { get; set; }
    public int ftwCounter { get; set; }
    public int counter { get; set; }

    public virtual AspNetUser AspNetUser { get; set; }
    public virtual ICollection<Learner_Treasure> Learner_Treasure { get; set; }
}

}

但是我在注册时收到此错误,我不知道如何修复它,有人可以帮助我,还是我的代码可能在错误的地方?

INSERT 语句与 FOREIGN KEY 约束“FK_Learner_AspNetUsers1”冲突。冲突发生在数据库“The_Factory”、表“dbo.AspNetUsers”、列“Id”中。

AspNetUser 类

public partial class AspNetUser
{
    public AspNetUser()
    {
        this.AspNetUserClaims = new HashSet<AspNetUserClaim>();
        this.AspNetUserLogins = new HashSet<AspNetUserLogin>();
        this.AspNetRoles = new HashSet<AspNetRole>();
    }

    public string Id { get; set; }
    public string Email { get; set; }
    public bool EmailConfirmed { get; set; }
    public string PasswordHash { get; set; }
    public string SecurityStamp { get; set; }
    public string PhoneNumber { get; set; }
    public bool PhoneNumberConfirmed { get; set; }
    public bool TwoFactorEnabled { get; set; }
    public Nullable<System.DateTime> LockoutEndDateUtc { get; set; }
    public bool LockoutEnabled { get; set; }
    public int AccessFailedCount { get; set; }
    public string UserName { get; set; }
    public int AvatarID { get; set; }

    public virtual ICollection<AspNetUserClaim> AspNetUserClaims { get; set; }
    public virtual ICollection<AspNetUserLogin> AspNetUserLogins { get; set; }
    public virtual Avatar Avatar { get; set; }

    public virtual Learner Learner { get; set; }
    public virtual ICollection<AspNetRole> AspNetRoles { get; set; }
}

}

【问题讨论】:

    标签: c# sql-server entity-framework asp.net-mvc-5


    【解决方案1】:

    试试

    [ForeignKey("AspNetUser")]
    

    超过learnerID 属性。原因是 EF 不知道您正在创建从 learneruser 的 1-1 映射(并且 learner 中的 PK 也是到 user 的 FK)。放置这个属性会告诉 EF 你的设计。

    【讨论】:

    • 这个声明是否直接高于 learnerID 属性?我问是因为无论放在哪里,都有一个错误
    • 是的,还请显示您在AspNetUser 类上编写的任何代码。我认为您在 AspNetUser 类中有一个属性,例如 public Learner Learner{get; set;} 然后您需要在其上方添加:[InverseProperty("AspNetUser")]
    • 有一个'公共虚拟学习者Learner{get; set;}' 属性。
    • 除了答案中的建议,添加[InverseProperty("AspNetUser")]即可。
    • 我仍然会遇到同样的砖墙,我编辑我的问题以添加 AspNetUser 类
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    • 1970-01-01
    相关资源
    最近更新 更多