2010-12-13 19 views
12

Kod ilk olarak EF4 (CTP5 kullanılarak) Yabancı bir tuşla birlikte tek bir gezinme özelliği ekleyebilir ve adlandırmaya uygun olur ve yalnızca yabancı anahtarı ekler masaya tek bir kez. Daha sonra gider ve aynı türden ikinci bir özellik eklerseniz, sadece iki yerine tablodaki 4 sütuna bölünür.Varlık Çerçevesinde aynı türden iki gezinme özelliğini nasıl kurabilirim?

örnek kod: Bu model ile

, ben PressTypeID adında PressType için AdapterFrameCapability tabloya eklenmiş tek özelliği olsun.

public class AdapterFrameCapability 
{ 
    [Key] 
    public int AdapterFrameCapabilityID { get; set; } 

    [Required] 
    public int PressTypeID { get; set; } 

    public virtual PressType PressType { get; set; } 
} 

Bu

Ben modellemek istediğiniz kurulum, ancak 4 sütun tabloda, FromPressTypeID, FromPressTypeFromPressTypeID, ToPressTypeID ve ToPressTypePressTypeID için birer yaratılmaktadır sonuçlanır. İdeal olarak, sadece FromPressTypeID ve ToPressTypeID için bir sütun istiyorum. Burada neyi yanlış yapıyorum?

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; } 
} 

cevap

14

istenilen şema almak için fluent API açılır gereken bu senaryoların biri:

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); 
} 

dernek birinde kapalı silmek basamaklarını Switching kasıtlı olduğunu aksi SQL Server olur çünkü

Introducing FOREIGN KEY constraint 'AdapterFrameCapability_ToPressType' on table 'AdapterFrameCapabilities' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints. Could not create constraint.

: aşağıdaki hata dışarı atmak Demek ki kodda yaptığım gibi derneklerden birini kapatmalıyız.

0

Sana veri açıklama özelliğini

[ForeignKey("FromPressTypeId")] 

vb kullanmak varsayalım sanıyordum

İlgili konular