如何获得entity framework代码第一个和可以为空的外键属性工作?

我正在尝试创建一个简单的entity framework代码第一个应用程序。 我有这些课程:

public class User { public int UserId { get; set; } public string Username { get; set; } public virtual ActivationTicket ActivationTicket { get; set; } } public class ActivationTicket { public int ActivationTicketId { get; set; } public virtual User User { get; set; } public string Ticket { get; set; } } 

当我尝试创建一个新用户并将其保存到数据库(没有ActivationTicket的用户)时,我收到一个exception

INSERT语句与FOREIGN KEY约束“ActivationTicket_User”冲突。 冲突发生在数据库“Test”,表“dbo.ActivatioTickets”,列’ActivationTicketId’中。 该语句已终止。

我假设EF将User和ActivationTicket之间的映射视为1-1,但它应该是1-0..1

我该怎么做才能让它发挥作用?

您将需要这样的映射规则:

模型构建器
     .Entity <用户>()
     .HasOptional (u => u.ActivationTicket)
     .WithOptionalPrincipal();

这将为您提供一个可以为空的UserId的ActivationTickets表。

@ b3n这应该足够了,至少在VS 2013中:

 public class User { public int UserId { get; set; } public string Username { get; set; } public int? ActivationTicketId { get; set;} public virtual ActivationTicket ActivationTicket { get; set; } } 

这是重要的部分:

 public int? ActivationTicketId { get; set;} 

这将在ActivasionTicket的“User”表中指定foreignkey,并定义它是可选的。

学分转至: http : //forums.asp.net/t/1948351.aspx ?Change + Foreign + Key + to+ nullable+using+Code+First#5554732

我有同样的问题,它立即为我工作。

另外作为注释,我用数据注释“[Key]”标记了所有主键。 这可能是必要的,以使这项工作。