如何获得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]”标记了所有主键。 这可能是必要的,以使这项工作。