У меня есть простая модель для отслеживания аренды шкафчиков, как способ изучения принципов EF Code First и DDD. Модель имеет следующие требования:
- Может быть много организаций (т.е. школ, колледжей и т. Д.).
- В каждой организации может быть много шкафчиков и много периодов аренды.
- Для каждой уникальной пары шкафчик и период аренды может быть несколько арендных плат (т.е. каждый шкафчик может быть сдан в аренду нескольким разным людям за один семестр).
Модель настроена так:
Организация имеет две коллекции; один для хранения коллекции шкафчиков и один для хранения периодов аренды. Шкафчик и период аренды не содержат ссылок на свою родительскую организацию, чтобы соответствовать традиции DDD, однако оба они содержат обязательный внешний ключ к своей родительской организации. Шкафчик и период аренды содержат коллекцию аренды. Прокат имеет обязательный внешний ключ для шкафчика и обязательный внешний ключ на период аренды. Изображение ниже даст хорошее представление о том, как выглядит моя модель.
Это будет сделано, поскольку эта организация моделируется каскадным удалением, поэтому при удалении организации удаляются все связанные с ней шкафчики и периоды аренды. Но я полагаю, что также имеет смысл моделировать период хранения и аренды с помощью каскадного удаления, чтобы при удалении шкафчика удалялись все связанные с ним аренды. То же самое относится и к периоду аренды. Когда я настраиваю его таким образом, EF говорит мне, что я не могу этого сделать, поскольку он может создавать циклы или несколько каскадных путей. Однако, если я возьму какое-либо одно отношение (неважно, какое) и отключу каскадное удаление, то это прекрасно создаст базу данных. Я полагаю, что это устраняет проблему с несколькими каскадами.
Поскольку каскад на удаление не работает в этой модели, это, кажется, указывает на то, что моя проблема может быть смоделирована неправильно. Я долго думал об этом и не могу придумать способ моделирования этой проблемы, который будет работать с каскадным удалением.
Я включил тестовый проект ниже (решение Visual Studio 2010). Единственное, что нужно изменить - это строка подключения в App.config. Я открыт для всех предложений, так как я только начинаю изучать принципы EF Code First и DDD.
http://www.mediafire.com/?kj3rrg433bq8i5g