Entity framework EF核心1.0外键问题
我真的不明白这是EF Core 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
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)