Заранее благодарим вас за помощь.Самостоятельная структура фреймворка сущности
Я пытаюсь создать базу данных для небольшого числа rpg с другом. До сих пор мы отслеживали такие вещи, как типы атак в файле JSON (мой друг не разбирается в технологии, поэтому мы рано скомпрометировали только текстовые файлы). Я хочу, чтобы сделать его веб-сайт, чтобы он мог легко изменить отношения между нашими идеями (типов, видов монстров, возможные атаки и т.д.)
Так данные я вытягивать из выглядит следующим образом:
{
"name": "water",
"isElement": true,
"defendAgainst": [
"fire",
"undead",
"atomic",
"food"
],
"immuneTo": [
"water"
],
"weakTo": [
"electric",
"zoetic",
"sonic",
"eldritch"
]
}, ... and so on
В этом примере вода является элементом, она может защищаться от огня, она невосприимчива к атакам воды, и она слаба к звуковым атакам.
Я сделал вещь, которая переводит JSON в объект, и я в конечном итоге что-то вроде:
public class monsterType
{
[Key]
public string name { get; set; }
public ICollection<monsterType> weakTo { get; set; }
public ICollection<monsterType> immuneTo { get; set; }
public ICollection<monsterType> defendAgainst { get; set; }
public bool isElement { get; set; }
}
Я перевожу с JSON, выполнив:
// set up the types references
foreach (typeJSON ty in typeListFromFile){
monsterType realTypeReference = lookUpMonsterTypeFromJSONtype(ty, realTypes);
//convert those lists
ICollection<monsterType> mtWTs = ty.weakTo.Select(w => lookUpMonsterTypeFromName(w, realTypes)).ToList();
ICollection<monsterType> mtDAs = ty.defendAgainst.Select(w => lookUpMonsterTypeFromName(w, realTypes)).ToList();
ICollection<monsterType> mtITs = ty.immuneTo.Select(w => lookUpMonsterTypeFromName(w, realTypes)).ToList();
//set them on the real type reference
realTypeReference.weakTo = mtWTs;
realTypeReference.defendAgainst = mtDAs;
realTypeReference.immuneTo = mtITs;
}
Данные переходит в случаях of monsterType просто отлично. Я сижу довольно с 40 monsterTypes, и все они относятся друг к другу просто отлично.
Я использую этот проект, чтобы научить себя MVC и Entity Framework (с кодовым первым?), И хотя я играл с Flask в прошлом, я немного из воды здесь, на C# .net землю, пожалуйста, простите меня, если я упущу что-то совершенно очевидное.
Я установил соединение db с базой данных SQL Server, и он создает таблицу realTypes ОК ----, но она не содержит столбцов immunTo, weakTo и protectAgainst, которые я ожидал бы, и я думаю, это потому, что это все самореферентны.
Хорошо, так что я сделал контекст данных:
public class monsterDataContext : DbContext
{
public monsterDataContext() : base("name=blood")
{
}
public DbSet<monsterType> Types { get; set; }
}
И я просто пройдёмся по моему списку и сохранить изменения:
using (var theDB = new monsterDataContext())
{
foreach (monsterType ty in realTypes)
{
theDB.Types.Add(ty);
}
theDB.SaveChanges();
}
Когда я делаю это, ошибки на theDB.SaveChanges () с:
Нарушение множественности. Роль 'monsterType_defendAgainst_Source' отношения 'ParseMonsterYaml.monsterType_defendAgainst' имеет множественность 1 или 0..1.
Я не совсем уверен, почему это проблема?
Он также создает таблицу, которая является большим, но колонны на самом деле нет, что я бы ожидать:
name, isElement, monsterType_name, monsterType_name1, monsterType_name2
но это на самом деле не имеет значения, сколько ошибок. Никакие данные не загружаются в таблицу, они пусты.
Что я делаю неправильно? Что-то фундаментальное? Я сталкиваюсь с чем-то ужасным? Есть ли способ лучше?
Проектирование вашей базы данных, прежде чем ваша модель кода, может значительно улучшить вашу архитектуру. Трудно понять, как ваша модель кода должна быть сопоставлена структуре базы данных. (не все модели могут быть) –
@SamAxe Я думаю, что вы правы. Сейчас я делаю 4 стола. Один для хранения имени и isElement и 3 для описания отношений weakTo, protectAgainst и immunTo с FK обратно в первую таблицу. Я изменил свой код и собираюсь продолжить разработку базы данных и затем соответствующим образом заполнить данные. Я попытаюсь найти другое время, чтобы узнать больше о Entity Framework (я чувствую, что я уже кое-что узнал) –