开发者

fluent nhibernate map hasmany using propertyref without fetch.join

开发者 https://www.devze.com 2023-03-30 16:34 出处:网络
I am using Nhibernate 3.2, along with a build of FluentNhibernate compatible with NH 3.2 and I have come to map a legacy part of my s开发者_Go百科ystem. I believe it is possible to do what I require,

I am using Nhibernate 3.2, along with a build of FluentNhibernate compatible with NH 3.2 and I have come to map a legacy part of my s开发者_Go百科ystem. I believe it is possible to do what I require, but need some assistance in mapping it correctly.

I have a User Class below, with a list of Applications.

public class User 
{
    public virtual string UserID { get; set; }
    public virtual int Id { get; set; }
    public virtual IList<Application> Applications { get; set; }
}

I also have a Application class which has a foreign key back to the User Class which is not the "primary key". See Below

public class Application 
{
    // Not sure if this 'User' is needed?
    public virtual User User { get; set; }
    public virtual int IdFromUserTable { get; set; }
    public virtual string ApplicationName { get; set; }

}

I have the corresponding ClassMaps, I think the UserMap is where the issue lies

UserMap

public class UserMap : ClassMap<User>
{
    public UserMap()
    {
        Id(x => x.UserID);
        HasMany(x => x.Applications)
            .AsBag()
            .KeyColumn("UserID")
            .PropertyRef("Id")
            .LazyLoad()
            .Inverse();
        Table("usertable");
        ReadOnly();
    }
}

ApplicationMap

public class ApplicationMap : ClassMap<Application>
{
    public ApplicationMap()
    {
        CompositeId()
            .KeyProperty(x => x.ApplicationName)
            .KeyProperty(x => x.IdFromUserTable, "UserID");   
        Table("applicationstable");
    }
}

The Table structures are as follows:

User Table

Primary Key - string, ColumnName = UserID
int (Identity) - int, ColumnName = Id

Applications Table

Composite Key - string, ColumnName = ApplicationName
and
int, ColumnName = UserId (references Id column in user table)

My question is how to get the mapping to work for the above scenario.

One caveat is: I cannot change the structure of the database, but I can change the classes / classmaps

Any help greatly appreciated..

PS - I did get this to work by adding in Fetch.Join in the HasMany userMap, but I would prefer to lazily evaluate the Application List when needed

Thanks, Mark

0

精彩评论

暂无评论...
验证码 换一张
取 消