webForumDet fria alternativet

MVC NHibernate

.NET

4 svar · 745 visningar · startad av Fubar

Medlem sedan feb. 200614 inlägg
Frågan#1

Har precis börjat med både MVC och NHibernate och stött på lite patrull.

Jag har 2 tabeller

Posts innehåller:
Id, Name, Content

Comments
Id, PostId, Message

PostController innehåller 2 actions, List och Details
där List skall returnera en förenklad struktur, tex Id, Name och antalet kommentarer. vill inte ladda alla kommentarer eller ens content från databasen för att inte ladda saker i onödan.

Hur bör jag gå tillväga? Testat att skapa 2 klasser (SimplePost och ExtendedPost som ärver av SimplePost men får då dubletter av varje rad (där ena kopian är SimplePost och den andra är ExtendedPost), detta löser dock inte problemet med att få ut antalet Kommentarer.

Ge gärna tips på bra läsning också ;)

Medlem sedan feb. 200614 inlägg
#2

Här kommer en liten uppdatering.

Databasen innehåller 2 rader.

Den här koden returnerar 4 object, först 2 av typen Post och sedan 2 av typen PostDetails.

        public IList<Post> ListLatest(int count)
        {
            using (ISession session = NHibernateHelper.OpenSession())
            {
               var posts = session.CreateQuery("select p from Post as p").List<Post>();
               return posts;
            }
        }
    public class Post
    {
        public virtual int PostId { get; private set; }
        public virtual string Title { get; set; }
        public virtual string Description { get; set; }
        public virtual DateTime CreatedDateTime { get; set; }
    }

    public class PostDetails : Post
    {
        public virtual string Contents { get; set; }
    }
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="HenrikJohansson" namespace="HenrikJohansson.Models">
    <class name="Post">
        <id name="PostId">
            <generator class="increment" />
        </id>
        <property name="Title" />
        <property name="Description" />
        <property name="CreatedDateTime" />
    </class>
</hibernate-mapping>
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="HenrikJohansson" namespace="HenrikJohansson.Models">
    <class name="PostDetails" table="Post">
        <id name="PostId">
            <generator class="increment" />
        </id>
        <property name="Title" />
        <property name="Description" />
        <property name="Contents" />
        <property name="CreatedDateTime" />
    </class>
</hibernate-mapping>

Är jag ute och cyklar så hjälp mig gärna in på banan igen ;)

Medlem sedan okt. 2002188 inlägg
#3

Hur går det?

Medlem sedan feb. 200614 inlägg
#4

Nä, fick inte till någon bra lösning på det hela så det ligger på is för tillfället :(
Tror det lutar åt att skippa nhibernate då jag inte får någon ordning på det

Medlem sedan aug. 20003 575 inlägg
#5

Fubar skrev:

Här kommer en liten uppdatering.

Databasen innehåller 2 rader.

Den här koden returnerar 4 object, först 2 av typen Post och sedan 2 av typen PostDetails.

        public IList<Post> ListLatest(int count)
        {
            using (ISession session = NHibernateHelper.OpenSession())
            {
               var posts = session.CreateQuery("select p from Post as p").List<Post>();
               return posts;
            }
        }
    public class Post
    {
        public virtual int PostId { get; private set; }
        public virtual string Title { get; set; }
        public virtual string Description { get; set; }
        public virtual DateTime CreatedDateTime { get; set; }
    }

    public class PostDetails : Post
    {
        public virtual string Contents { get; set; }
    }
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="HenrikJohansson" namespace="HenrikJohansson.Models">
    <class name="Post">
        <id name="PostId">
            <generator class="increment" />
        </id>
        <property name="Title" />
        <property name="Description" />
        <property name="CreatedDateTime" />
    </class>
</hibernate-mapping>
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="HenrikJohansson" namespace="HenrikJohansson.Models">
    <class name="PostDetails" table="Post">
        <id name="PostId">
            <generator class="increment" />
        </id>
        <property name="Title" />
        <property name="Description" />
        <property name="Contents" />
        <property name="CreatedDateTime" />
    </class>
</hibernate-mapping>

Är jag ute och cyklar så hjälp mig gärna in på banan igen ;)

Det är inte så konstigt för du mappar 2 olika objekt mot samma mappning.
Din extendedpost skall vara subclass :) istället för class.

270 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
143 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)