Entity framework EF核心1.0外键问题

Entity framework EF核心1.0外键问题,entity-framework,entity-framework-core,Entity Framework,Entity Framework Core,我真的不明白这是EF Core 1.0的错误吗 public class User : BaseEntity { public string Username { get; set; } } public class UserDetail : BaseEntity { public int UserId { get; set; } public string Address { get; set; } public string Country { get; se

我真的不明白这是EF Core 1.0的错误吗

public class User : BaseEntity
{
    public string Username { get; set; }
}
public class UserDetail : BaseEntity
{
    public int UserId { get; set; }
    public string Address { get; set; }
    public string Country { get; set; }

    public virtual User User { get; set; }

    [ForeignKey("UserId")]
    public virtual ICollection<UserLanguage> Languages { get; set; }
}

public class UserLanguage : BaseEntity
{
    public string Name { get; set; }
    public int UserId { get; set; }
}
在我的UserDetail中,我有2条记录

Id          UserId      Address                                           Country
----------- ----------- -------------------------------------------------- ------
1           1           Some Address                                       MY
2           3           NULL                                               SG
在执行插入时使用我的用户语言

INSERT INTO UserLanguage(Name, UserId)
VALUES ('English', 3) 
它将遇到以下错误

The INSERT statement conflicted with the FOREIGN KEY constraint "FK_UserLanguage_UserDetail_UserId". The conflict occurred in database "Job", table "dbo.UserDetail", column 'Id'.

我在这里做错了什么?ForeignKey是UserId它怎么会指向UserDetail列“Id”

到您的
UserLanguage
类尝试添加:

public virtual UserDetail UserDetail  { get; set; }

UserLanguage
类中尝试添加:

public virtual UserDetail UserDetail  { get; set; }
试试下面的方法

public class User : BaseEntity
{
    public string Username { get; set; }

    public virtual ICollection<UserLanguage> Languages { get; set; }
}
public class UserDetail : BaseEntity
{
    public int UserId { get; set; }
    public string Address { get; set; }
    public string Country { get; set; }

    public virtual User User { get; set; }        
}

public class UserLanguage : BaseEntity
{
    public string Name { get; set; }
    public int UserId { get; set; }

    public virtual User User { get; set; } 
}
它将成功,因为UserDetail中有两个主键为1,2的条目,而UserDetail中没有主键为3的条目。

请尝试以下操作

public class User : BaseEntity
{
    public string Username { get; set; }

    public virtual ICollection<UserLanguage> Languages { get; set; }
}
public class UserDetail : BaseEntity
{
    public int UserId { get; set; }
    public string Address { get; set; }
    public string Country { get; set; }

    public virtual User User { get; set; }        
}

public class UserLanguage : BaseEntity
{
    public string Name { get; set; }
    public int UserId { get; set; }

    public virtual User User { get; set; } 
}

它将成功,因为UserDetail中有两个主键为1,2的条目,而UserDetail中没有主键为3的条目。

您实际上是在执行您提供的SQL语句(例如,使用ExecuteSqlCommand),还是只是对EF代码的粗略翻译?无论哪种方式,EF都不太可能是一个bug,但是如果您正在执行SQL,您可能会发现标记“T-SQL”和“SQL”会带来更好的运气-这听起来更像是一个表配置问题,而不是代码问题。基本上,我使用entityframework insertasync执行insert,然后我就得到了那个错误。然后,我编写SQL语句并在SQL ide中执行它,同时返回相同的错误消息。您是否实际执行您提供的SQL语句(例如,使用ExecuteSqlCommand),或者这只是EF代码的粗略翻译?无论哪种方式,EF都不太可能是一个bug,但是如果您正在执行SQL,您可能会发现标记“T-SQL”和“SQL”会带来更好的运气-这听起来更像是一个表配置问题,而不是代码问题。基本上,我使用entityframework insertasync执行insert,然后我就得到了那个错误。然后我编写SQL语句并在SQLIDE中执行它,同时返回相同的错误消息。
INSERT INTO UserLanguage(Name, UserId)
VALUES ('English', 1) 
INSERT INTO UserLanguage(Name, UserId)
VALUES ('French', 2)