2016-02-01 47 views
0

我真的不明白这个EF核心1.0的错误?EF核心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; } 
} 

在我的用户表我有3个用户

Id   Username 
----------- --------------- 

1   john 
2   doe 
3   jack 

在我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”

+0

您是否真的在执行您提供的SQL语句(例如使用ExecuteSqlCommand)还是仅仅是您的EF代码的粗略翻译?这不太可能是EF中的一种错误,但是如果您正在执行SQL,则可能会发现标签“T-SQL”和“SQL”的运气更好 - 这听起来更像是表配置问题而不是代码问题。 – nemec

+0

基本上我会使用entityframework insertasync执行插入操作,然后我得到那个错误。然后我编写SQL语句并在sql ide中执行它也返回相同的错误消息。 – tomato45un

回答

2

尝试以下

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; } 
} 

这个问题在下面一行代码

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

这创建了UserDetail之间的外键关系和UserLanguage表,而您想在User和UserLanguage表之间创建它。

在你现有的模式,如果你尝试插入

INSERT INTO UserLanguage(Name, UserId) 
VALUES ('English', 1) 
INSERT INTO UserLanguage(Name, UserId) 
VALUES ('French', 2) 

它会成功,因为UserDetail有两个条目1,2 PK而存在UserDetail与PK 3没有进入。

0

要将UserLanguage类尝试添加:

public virtual UserDetail UserDetail { get; set; } 
+0

尝试它不工作,奇怪的问题。 – tomato45un