benim durumdur:Varlık Çerçevesi: Neden WillCascadeOnDelete() Yöntemi yok sayılır?
public abstract class Article
{
[key]
public Guid Guid { get; set;}
public string Name { get; set;}
.
.
.
}
public class Download : Article
{
...
}
public abstract class Category : Article
{
...
}
public class DownloadCategory : Category
{
....
}
Sonra olmalı bir sayıda çoğa böyle indirin ve DownloadCategory
arasındaki ilişki:
public class DownloadInCategory
{
[Key, Column(Order = 1), Required]
[ForeignKey("Download")]
Public Guid DownloadGuid { get; set; }
Public Download Download { get; set; }
[Key, Column(Order = 2), Required]
[ForeignKey("Category")]
Public Guid CategoryGuid { get; set; }
Public DownloadCategory Category { get; set; }
}
ben Add-Migration
çağırdığınızda DownloadInCategory
varlık için yaratılan göç şudur: Notik gibi : Burada
CreateTable("dbo.DownloadInCategories",
c => new
{
CategoryGuid = c.Guid(nullable: false),
DownloadGuid = c.Guid(nullable: false),
})
.PrimaryKey(t => new { t.CategoryGuid, t.DownloadGuid })
.ForeignKey("dbo.DownloadCategories", t => t.CategoryGuid)
.ForeignKey("dbo.Downloads", t => t.DownloadGuid, cascadeDelete: true)
.Index(t => t.CategoryGuid)
.Index(t => t.DownloadGuid);
Sorum ise e, yabancı anahtarlardan birine
cascadeDelete: true
eklemiyor. NİYE YA!!!!!!?????
modelbuilder
Kurallarından hiçbirini değiştirmediğimi belirtmeliyim. Bu nedenle, bu şema geçişte silmek için Casscade'i eklemelidir. Benim mülklerim [Required]
.
Neyi yanlış yapıyorum?
teşekkürler çocuklar ...
Güncelleme: Article
ve Category
sınıflar abstract
olduklarını lütfen unutmayın. Bu şema ile hiçbir mantıksal bir sorun yok : Ben
Güncelleme 2 yukarıdaki sınıflar değişti. Taşıma işlemini el ile düzenlerseniz, veritabanını normal olarak günceller.
Güncelleme 3: Bazı soruşturma ve testlerden sonra Sorun Category
den inheritanced gibi görünüyor: My EF Kalıtım Metodolojisi TPC
Güncelleme 4'tür. DownloadCategory
, Category
'dan devralındığında, Cascade kullanılmaz. ama ben doğrudan makaleden DownloadCategory
Inherit, Cascade dağıtılmış. Ama neden yine? Anahtar Madde sınıfına üzerindedir
DownloadCategory : Category : Article
Download : Article
vs: çünkü bu düşünürdüm
düzenleme göç elle ince çalışırsa, kaskad anlaşılmaktadır değildir silmek neden teorik soru bu daha mı? – jjj
@jjj Hayır. Bu bakış açımdan tamamen pratiktir. Göçün manuel olarak düzenlenmesi iyi bir uygulama değildir. Çalıştığım gibi daha büyük projelerde, böyle bir şey, projeye yeni özelliklerin bakımı ve geliştirilmesine daha fazla önem veriyor. Taşıma işlemini manuel olarak değiştirdiğimi düşünüyorum. ve göç, modellerin şemasıyla eşleşmelidir. – abzarak
Sanırım bu, yerleşik sözleşmelerin mükemmel olduğu ideal bir dünyada doğru olurdu. Bu durumda bunun neden olduğunu anlayabilmek için kaynak kodun içine girebilirsiniz, ancak sanırım döngüleri önlemek için bir kısayolun sonucudur. – jjj