我有2个模型,注册和注册码。注册可能只有一个注册码,注册码可能只有一个注册。
public class Registration
{
public Registration()
{
RegistrationDate = System.DateTime.Now;
}
[Key]
public int RegistrationID { get; set; }
[DataType(DataType.DateTime)]
public DateTime? RegistrationDate { get; set; }
public RegistrationCode RegistrationCode { get; set; }
}
public class RegistrationCode
{
[Key]
public string Code { get; set; }
public bool IsUsed { get; set; }
public Registration Registration { get; set; }
}
我已尝试将关联映射到Fluent API,如下所示:
modelBuilder.Entity<Registration>()
.HasOptional(t => t.RegistrationCode)
.WithOptionalPrincipal();
但问题是当我使用update-database重新创建数据库时,我的RegistrationCode表有以下字段,表明某些内容不对:
Code nvarchar(50) Unchecked
IsUsed bit Unchecked
Registration_RegistrationID int Checked
Registration_RegistrationID1 int Checked
有人可以建议我该怎么做吗?
答案 0 :(得分:0)
这将使实体之间产生一对一或零关系。
modelBuilder.Entity<Registration>()
.HasRequired(m => m.RegistrationCode)
.WithOptional(t => t.Registration)
有关关系的详细信息,请按照MSDN
进行操作答案 1 :(得分:0)
你不能创建这样的关系,因为左侧总是必须在右侧插入(右侧的pk将用于左侧),如果在右侧之前插入左侧,则会导致违反主键约束。正如@Ashish Rajput所说,你必须实施Required-to-Optional Relationship (One-to–Zero-or-One)
或Many-To-Many
。
答案 2 :(得分:0)
通过您的代码
modelBuilder.Entity<Registration>()
.HasOptional(t => t.RegistrationCode)
.WithOptionalPrincipal();
你告诉EF有一个主体(Registration
),其关联不是模型的一部分。 除此之外,Registration
中有RegistrationCode
个属性。 EF将此作为第二个外键。解决方法是告诉EF两者是相同的:
modelBuilder.Entity<Registration>()
.HasOptional(t => t.RegistrationCode)
.WithOptionalPrincipal(r => r.Registration);