Вот моя ситуация:Entity Framework: почему метод WillCascadeOnDelete() игнорируется?
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
{
....
}
И тогда я должен иметь много-ко-многим между скачать и DownloadCategory
, как это:
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; }
}
Когда я называю Add-Migration
созданной миграции для DownloadInCategory
лица является:
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);
Вот мой вопрос: Как вы NOTIC e он не добавляет cascadeDelete: true
к одному из внешних ключей. ЗАЧЕМ!!!!!!?????
Я должен упомянуть, что я не менял ни одного из modelbuilder
Конвенций. Итак, эта схема должна добавить Casscade при удалении в процессе миграции. Мои объекты: [Required]
.
Что я делаю неправильно?
Спасибо, ребята ...
Обновление: Пожалуйста, обратите внимание, что Article
и Category
классы abstract
. я изменил классы выше
Update 2: Там нет логической проблемы с этой схемой. Если я вручную отредактирую миграцию, он будет обновлять базу данных в обычном режиме.
Update 3: My EF Наследование Методология является TPC
Update 4: После некоторого исследования и испытания кажется проблема inheritanced из Category
. Когда DownloadCategory
Унаследовано от Category
, Cascade не используется. но когда я наследую DownloadCategory
непосредственно из статьи, развертывается Cascade. Но почему снова?
Если редактирование миграции вручную работает отлично, это скорее теоретический вопрос о том, почему каскадное удаление не выводится? – jjj
@jjj Нет. Это совершенно практично с моей точки зрения. Ручное редактирование миграции не является хорошей практикой. В более крупных проектах, таких как тот, над которым я работаю, делает такое, что добавляет больше соображений по обслуживанию и разработке новых функций для проекта. Я думаю, что редактирование вручную неправильно. и миграция должна соответствовать схеме моделей. – abzarak
Я полагаю, что это было бы правдой в идеальном мире, где встроенные соглашения были бы идеальными. Вы можете вникнуть в исходный код, чтобы выяснить, почему это произошло в этом случае, но я предполагаю, что это результат ярлыка, чтобы избежать циклов. – jjj