EF中同一表的外键-出错
本文关键字:-出错 EF | 更新日期: 2023-09-27 18:18:34
基本上我得到了以下表格:
[Table("UserProfile")]
public class UserProfile
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
[Required]
public string UserName { get; set; }
[Required]
public string AffiliateId { get; set; }
[ForeignKey("UserId")]
public UserProfile Referer { get; set; }
}
具有指向自身的外键(Referer)。问题是,然而,当我试图插入一个新的行:
WebSecurity.CreateUserAndAccount(model.UserName, model.Password, propertyValues: new { AffiliateId = affiliateId, Referer = referer });
这里的变量"referer"是一个实际的UserProfile。我得到以下错误:不存在从对象类型UserProfile到已知托管提供程序本机类型的映射。
我做错了什么?
我假设您正在尝试引用不同的 UserProfile
对象作为引用者,在这种情况下,您不想使用主键(UserId
)作为传递给ForeignKey
属性的值。相反,您应该声明另一个int属性作为Referrer对象的FK,并使用ForeignKey
告诉EF将其用作Referer
导航属性的FK,或者根本不使用ForeignKey
,让EF为您生成键列:
[Table("UserProfile")]
public class UserProfile
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
// ...
public UserProfile Referer { get; set; } // EF will generate Referer_UserId
}
(ForeignKey
属性用于告诉实体框架如何将导航属性与相应的FK列匹配-它不用于标识引用对象的主键)
现在,话虽如此,我不确定这是导致当前错误的原因:
No mapping exists from object type UserProfile to a known managed provider native type.
检查确保在AccountModels.cs中的DbContext对象中定义了一个DbSet<UserProfile> UserProfiles
。如果您的UserProfile对象实际上引用了您没有在上面的示例代码中显示的任何其他类型,请确保为这些类型也有一个DbSet<>
。
因为您正在传递概要文件,所以不应该引用语法。UserId ?