Я экспериментирую с db4o в качестве хранилища данных, поэтому, чтобы разобраться с ним, я подумал, что мне нужно создать простое веб-приложение для отслеживания проблем (в ASP.NET MVC).Я обнаружил, что db4o отлично подходит для быстрой разработки, особенно для небольших приложений, подобных этому, и это также устраняет необходимость в ORM.
Однако, исходя из фона SQL Server / MySQL, я 'Я немного не уверен, как мне следует структурировать свои объекты, когда дело доходит до отношений (или, возможно, я просто не совсем понимаю, как работают базы данных объектов).
Вот мой простой пример: у меня всего две моделиклассы, проблема и персона.
public class Issue
{
public string ID { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public DateTime? SubmittedOn { get; set; }
public DateTime? ResolvedOn { get; set; }
public Person AssignedBy { get; set; }
public Person AssignedTo { get; set; }
}
public class Person
{
public string ID { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public string Password { get; set; }
}
Свойства ID
- это просто строки GUID, сгенерированные помощником .NET Guid.NewGuid()
.
Итак, вот как я изначально думал, что приложение будет работать;пожалуйста, игнорируйте любые проблемы безопасности и т. д. и предположим, что у нас уже есть несколько Person
объектов, хранящихся в базе данных:
- Пользователь входит в систему. Запросите базу данных для
Person
, которая соответствует имени пользователя и паролю,и сохранить его / ее идентификатор GUID в качестве переменной сеанса.Перенаправить на главный экран приложения. - Зарегистрированный пользователь создает новую заявку на выдачу, выбирая пользователя, которому необходимо назначить его, из раскрывающегося списка.Они заполняют другие данные (название, описание и т. Д.), А затем отправляют форму.
- Запрос объектов
Person
в базе данных (по их идентификаторам GUID), чтобы получить объект, представляющий вошедшего в систему пользователя иодин, представляющий пользователя, которому был назначен билет.Создайте новый объект Person
(заполненный опубликованными данными формы), назначьте объекты Person
свойствам Issue
AssignedBy
и AssignedTo
объекта и сохраните его.
Это будет означать, что у меня есть два Person
объекта, сохраненных против каждой Issue
записи.Но что произойдет, если я обновлю исходный Person
- все ли сохраненные ссылки на этот Person
в различных объектах выпуска обновятся, или мне придется обрабатывать это вручную? Являются ли ссылками или копиями?
Было бы лучше / эффективнее просто хранить строку GUID для полей AssignedBy и AssignedTo (как показано ниже), а затем искать исходную персону на основеоб этом каждый раз?
public class Issue
{
public string ID { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public DateTime? SubmittedOn { get; set; }
public DateTime? ResolvedOn { get; set; }
public string AssignedByID { get; set; }
public string AssignedToID { get; set; }
}
Я думаю, что я просто застрял в определенном образе мышления, который смущает меня.Если бы кто-то мог объяснить это ясно, это было бы очень полезно!