Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF中相同表的外键-获取错误_C#_Asp.net Mvc_Database_Entity Framework_Database Design - Fatal编程技术网

C# EF中相同表的外键-获取错误

C# EF中相同表的外键-获取错误,c#,asp.net-mvc,database,entity-framework,database-design,C#,Asp.net Mvc,Database,Entity Framework,Database Design,基本上我得到了下表: [Table("UserProfile")] public class UserProfile { [Key] [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] public int UserId { get; set; } [Required] public string UserName { get; set; } [Required]

基本上我得到了下表:

    [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到已知托管提供程序本机类型的映射


我做错了什么?

因为您正在传递配置文件,语法是否应该是referer.UserId?

我假设您试图引用另一个
UserProfile
对象作为referer,在这种情况下,您不想使用主键(
UserId
)作为传递给
ForeignKey
属性的值。相反,您应该声明另一个int属性作为Referer对象的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 UserProfiles
。如果您的UserProfile对象实际上引用了您在上面的示例代码中没有显示的任何其他类型,请确保这些类型也有一个
DbSet

我尝试将其更改为Referer,UserId,但现在我得到了以下错误:无效的列名“Referer”。通过传递实体,我看到您已经解决了这个问题。在我的回答中,Referer一词用小写字母r拼写。我更改了你告诉我的内容,并将代码行更改为:WebSecurity.CreateUserAndAccount(model.UserName,model.Password,propertyvalue:new{AffiliateId=AffiliateId,Referer\u UserId=Referer.UserId});现在它显然起作用了:)