Wpis z mikrobloga

#programowanie #aspdotnet #dotnet #entityframework #mvc

Chcę stworzyć dwie tabele do mojej bazy danych. Nazywają się "Notes" i "Tags".
[[Tak wygląda kod]](http://pastebin.com/ijsApEcD)
Chcę żeby w ICollection np. klasy Notes były zachowane odnośniki do konkretnych Tagów znajdujących się w bazie. Ma to też działać na odwrót: chcę wiedzieć które notatki mają konkretny tag, toteż w klasie "Tags" jest ICollection.

Dodałem właśnie migrację, i oto co proponuje mi Visual Studio:
[[link]](http://pastebin.com/KJRb8jzR)
Co to za tabela "dbo.TagsNotes" chce mi się utworzyć w bazie danych? Czy model który utworzyłem, będzie faktycznie spełniał swoje zadanie (wg. tego jak planuję)?
  • 10
@Pietrek558: aha, chodzi Ci pewnie o to co jesli tag nie istnieje, to że niby wyleci wyjątek. XD

string myTag = "bekazwegetarian";

var tag = db.Tags.SingleOrDefault(t=> t.name == myTag);

if(tag == null)
{
//taga nie ma, wiec dodajemy do bazy.
db.Tags.Add(new Tag(){ name = "bekazwegetarian" });
}

var notatka = db.Notes.First(); // lub tworzymy kompletnie nową i dodajemy do bazy.
notatka.Tags.Add(db.Tags.Single(t=>t.name == myTag));

db.SaveChanges();

pewnie można by jeszcze ładniej...
@niepoprawnyhumanista dzięki za poprawki w kodzie ;)
Ale nie do końca jednak zrozumiałem odpowiedź na moje pytanie.

a po drugie, nie musisz mu przypisać notatkę.

Przecież to notatka zawiera tagi.

Muszę. Chcę żeby mając notatkę można było zobaczyć jakie ma tagi. Chcę też, żeby mając tag, można było zobaczyć które z notatek go mają (tak jak na wykopie, klikasz na tag i ci wyskakują wszystkie wpisy z tym tagiem). Czyli muszę dodać
@Pietrek558:

Czyli muszę dodać tagowi notatkę.


Nie!

Dodajesz tylko w jedną stronę.

Ktoś dodaje notatkę z tagami.

tworzysz notatke:

var notatka = new Notatka()
// wypelniasz pola w notatce.

var tagi = new List(); // czy skądś je tam pobierasz, przychodzą w requescie, cokolwiek.

dodajesz do notatki tagi:

notatka.Tags = tagi;

(lub jeśli to jakas tablica z tagami a nie lista to tak jak miales w foreach

foreach(var tag in tags)
@Pietrek558: jeszcze taka uwaga:

klasy powinieneś mieć Note i Tag (liczba pojedyncza), bo reprezentują one pojedynczy element.
W DbContexcie tworzysz liste elementów (DbSet) wiec tam jest liczba mnoga.

public DbSet Notes {get; set;}

I pola pisz raczej CamelCase, tzn nie "ID" tylko "Id".

To konwencja, ale dosyć istotna. EntityFramework posiada swoje konwencje i np może szukać Ci pola które będzie dokładnie "Id" a nie "ID" by na nim utworzyć klucz. Dla