猿问

实体框架关键问题

当我尝试登录时出现以下错误:


Project.Model.Identity.UserLogin:: EntityType 'UserLogin' 没有定义键。定义此 EntityType 的键。UserLogins: EntityType: EntitySet 'UserLogins' 基于未定义键的类型 'UserLogin'。


我正在尝试在我的 dbcontext 中使用复合键


  // Primary Key

  this.HasKey(t => new { t.LoginProvider, t.ProviderKey, t.UserId });

但它似乎无法找到它,它看起来是在模型中而不是在上下文中搜索键,因为当我在模型中添加“[Key]”关键字时,它抱怨必须使用 HasKey复合键


public partial class UserLogin

{

    [Key]

    public string LoginProvider { get; set; }

    [Key]

    public string ProviderKey { get; set; }

    [Key]

    public string UserId { get; set; }

    public virtual User User { get; set; }

}

我该如何度过这一关?我是否在模型中添加了 HasKey,如果是,如何添加,为什么它没有在上下文中选择它?


慕后森
浏览 146回答 2
2回答

慕慕森

如文档中所述,当您有复合键时,实体框架要求您定义键属性的顺序。您可以使用 Column 注释来指定顺序。尝试修改代码如下:public partial class UserLogin{    [Key]    [Column(Order=1)]    public string LoginProvider {get; set;}    [Key]    [Column(Order=2)]    public string ProviderKey {get; set; }    // and so on...}
随时随地看视频慕课网APP
我要回答