Ric*_*rds 12 .net c# entity-framework entity-framework-4 ef-code-first
使用代码第一个EF4(使用CTP5),我可以添加单个导航属性以及外键,它将遵循命名并且只将一次外键添加到表中.如果我然后添加相同类型的第二个属性,它会将其分解为表中的4列而不是仅仅两个.
示例代码:
使用此模型,我获得了一个名为PressTypeID的PressType的AdapterFrameCapability表中的单个属性.
public class AdapterFrameCapability
{
    [Key]
    public int AdapterFrameCapabilityID { get; set; }
    [Required]
    public int PressTypeID { get; set; }
    public virtual PressType PressType { get; set; }
}
这是我想要建模的设置,但它导致在表中创建4列,分别用于FromPressTypeID,FromPressTypeFromPressTypeID,ToPressTypeID和ToPressTypePressTypeID.理想情况下,我只是喜欢FromPressTypeID和ToPressTypeID的列.我在这做错了什么?
public class AdapterFrameCapability
{
    [Key]
    public int AdapterFrameCapabilityID { get; set; }
    [Required]
    public int FromPressTypeID { get; set; }
    [Display(Name = "From Press Type")]
    public virtual PressType FromPressType { get; set; }
    [Required]
    public int ToPressTypeID { get; set; }
    [Display(Name = "To Press Type")]
    public virtual PressType ToPressType { get; set; }
}
Mor*_*avi 14
您需要删除流畅的API以获取所需的架构,这是其中一种情况:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<AdapterFrameCapability>()
                .HasRequired(afc => afc.FromPressType)
                .WithMany()
                .HasForeignKey(afc => afc.FromPressTypeID)
                .WillCascadeOnDelete(true);
    modelBuilder.Entity<AdapterFrameCapability>()
                .HasRequired(afc => afc.ToPressType)
                .WithMany()
                .HasForeignKey(afc => afc.ToPressTypeID)
                .WillCascadeOnDelete(false);
}
在其中一个关联上切换级联删除是故意的,否则 SQL Server会抛出以下错误:
在表'AdapterFrameCapabilities'上引入FOREIGN KEY约束'AdapterFrameCapability_ToPressType'可能会导致循环或多个级联路径.指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束.无法创建约束.
因此,我们需要在其中一个关联上关闭它,就像我在代码中所做的那样.