webForumDet fria alternativet

Spara many-to-many relation med nhibernate

.NET

5 svar · 1 191 visningar · startad av doggelito

Medlem sedan juni 20003 076 inlägg
Frågan#1

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 SaveMyClass1 bara för att lägga till en relation!

Medlem sedan aug. 20003 575 inlägg
#2

Many-To-Many är något man inte rekommenderar och går i många fall att lösa på ett annat smartare sätt med en entity som är själva länkningen.

Jag tror att båda dina exempel skall fungera du behöver sätta i mappningen i fall ett att den skall sköta själva nersparningen.

Medlem sedan juni 20003 076 inlägg
#3

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:

MyClass1.IList<MyRelationClass>().IList<MyClass2>()

Nää, det kan inte vara så du menar, eller?
Klass 1 måste ju ha endast en samling med Klass2:or

Medlem sedan juni 20003 076 inlägg
#4

Hittade en liknande fråga här:
http://stackoverflow.com/questions/1695063/what-is-the-correct-way-to-define-many-to-many-relationships-in-nhibernate-to-all/
Intressant tråd, kan dock inte utläsa och förstå deras slutsats (om de kom fram till någon)!?

Medlem sedan aug. 20003 575 inlägg
#5

http://docs.jboss.org/hibernate/core/3.3/reference/en/html/collections.html#collections-ofvalues

https://www.hibernate.org/hib_docs/nhibernate/html/best-practices.html

Don't use exotic association mappings.

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.

Medlem sedan aug. 20003 575 inlägg
#6

doggelito skrev:

Hittade en liknande fråga här:
http://stackoverflow.com/questions/1695063/what-is-the-correct-way-to-define-many-to-many-relationships-in-nhibernate-to-all/
Intressant tråd, kan dock inte utläsa och förstå deras slutsats (om de kom fram till någon)!?

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
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)