Har en many-to-many relation där tre tabeller ingår (vad skulle det annars vara! ;) ), en på varje sida och en relationstabell i mitten.
Jag undrar nu:
På vilka sätt kan jag spara min relation mot databasen?
Ett sätt är ju så här:
MyServiceLayer service = new MyServiceLayer();
MyClass1.MyClasses2.Add(new MyClass2());
service.Save(MyClass1);
Där MyClasses2 är ex. en IList<MyClass2>.
Men finns det nått annat sätt än att köra en addmetod?
Jag tänker mig en metod, typ:
MyServiceLayer service = new MyServiceLayer();
service.AddRelation(1, 23);
public class MyServiceLayer
{
public void AddRelation(int class1ID, int class2ID)
{
???
}
}
Skulle det gå att göra något liknande? Är det vettigt ens?
Men relationen i sig är ju inte mappad i egen klass så jag kommer inte på hur jag då skulle kunna spara den utan att använda Add på IList:en!? :q
Varför jag frågar från början är för att det känns helt onödigt att behöva köra en Save på MyClass1 bara för att lägga till en relation!
Varför rekommenderar man inte many-to-many?
Ser man till databasen så är ju det en väldigt vanlig relation.
Men ser man till databasen med sina tre tabeller så kan det ju verka logiskt att ha även tre domänklasser men är det verkligen vettigt? Mellantabellen gör ju inget mer än att länka ihop två andra objekt.
Och gör man så så får man en skum relation kodmässigt, det skulle då se ut:
Good usecases for a real many-to-many associations are rare. Most of the time you need additional information stored in the "link table". In this case, it is much better to use two one-to-many associations to an intermediate link class. In fact, we think that most associations are one-to-many and many-to-one, you should be careful when using any other association style and ask yourself if it is really neccessary.
Där låter dom en av klasserna sköta nersparningen för du kan inte låta både Category och Item i det där fallet spara ner relationen då det skulle bli en cirkelsituation, Category försöker spara item som försöker spara Category :).
260 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849