Bir "alt" satırı silmeye çalışırsanız, her zaman bir özel durum alırım.EF6.0 "Bir yabancı anahtar özelliklerinin bir veya daha fazla geçersiz olması nedeniyle ilişki değiştirilemedi"
using (var context = new CompanyContext())
{
ItemType itemType = context.ItemTypes.FirstOrDefault(i => i.Name == "ServerType");
ItemTypeItem itemTypeItem = itemType.Items.FirstOrDefault(i => i.Name == "DatabaseServer");
itemType.Items.Remove(itemTypeItem);
context.SaveChanges(); <=== exception!
}
aşağıdaki istisna SaveChanges()
yöntemine atılır: İşte snipset olduğunu. Bir veya yabancı anahtar özelliklerinin daha olmayan null olduğu için
"ilişkisi değiştirilemiyor. Bir değişiklik ilişkiye yapıldığında, ilgili yabancı anahtar özellik null bir değere ayarlanır. Yabancı anahtar null değerlerini desteklemiyorsa, yeni bir ilişki tanımlanmalı, yabancı anahtar özelliğine sıfırdan başka bir değer verilmemeli veya ilgisiz nesne silinmelidir. "
Varlık Yapılandırma
public class ItemTypeConfiguration : NamedEntityConfiguration<ItemType>
{
public ConfigurationColumn ParentIDColumn;
public ConfigurationColumn ValidationPatternColumn;
public ItemTypeConfiguration() : base()
{
ParentIDColumn = new ConfigurationColumn() { Name = "ParentID", Ordinal = base.LastOrdinalPosition + 1 };
ValidationPatternColumn = new ConfigurationColumn() { Name = "ValidationPattern", Length = 1024, Ordinal=base.LastOrdinalPosition + 2};
this.Property(t => t.ParentID)
.HasColumnName(ParentIDColumn.Name)
.HasColumnOrder(ParentIDColumn.Ordinal);
this.HasOptional(t => t.Parent).WithMany().HasForeignKey(u => u.ParentID).WillCascadeOnDelete(false);
this.Property(t => t.ValidationPattern)
.HasColumnName(ValidationPatternColumn.Name)
.HasColumnOrder(ValidationPatternColumn.Ordinal)
.HasMaxLength(ValidationPatternColumn.Length);
}
...
public class ItemTypeItemConfiguration : NamedEntityConfiguration<ItemTypeItem>
{
public ConfigurationColumn ItemTypeIDColumn;
public ItemTypeItemConfiguration() : base()
{
ItemTypeIDColumn = new ConfigurationColumn(){Name="ItemTypeID", IsRequired=true, Ordinal= base.LastOrdinalPosition+1};
this.Property(t => t.ItemTypeID)
.HasColumnName(ItemTypeIDColumn.Name)
.HasColumnOrder(ItemTypeIDColumn.Ordinal);
this.HasRequired(t => t.ItemType).WithMany(t=>t.Items).HasForeignKey(u => u.ItemTypeID).WillCascadeOnDelete(true);
}
...
Ben blog buldum ama "NesneSil" yöntemini yok.
Herhangi bir fikir? Teşekkür ederim.
olası yinelenen [bir veya yabancı anahtar özelliklerinin daha olmayan null olduğu için ilişkiye değiştirilemedi] (http://stackoverflow.com/questions/5538974/the-relationship-could-not-be-changed-because-or-more-of-the-foreign-key-pro) –
Bağlantı –