我尝试登录时收到以下错误:
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,如果是这样,为什么不在上下文中添加它?
答案 0 :(得分:5)
如文档中所述,
当您有复合键时,Entity Framework要求您定义键属性的顺序。您可以使用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...
}
答案 1 :(得分:3)
尝试在[Key]属性
下添加列顺序数据注释[Key]
[Column(Order=1)]
public string LoginProvider { get; set; }
[Key]
[Column(Order=2)]
public string ProviderKey { get; set; }
[Key]
[Column(Order=3)]
public string UserId { get; set; }
public virtual User User { get; set; }
在EF 6中,Key属性在应用于单个整数类型属性时会创建带有标识列的PK。组合键不会为整数属性创建标识列。