1

これは一般的な質問です。よくある質問ですが、何も見つかりませんでした(または、何を検索すればよいかわかりません)。

プロジェクトに次のエンティティがあります。

public class User
{
    public virtual int      Id          { get; set; }
    public virtual string   FirstName   { get; set; }
    public virtual string   LastName    { get; set; }
    public virtual Unit     Unit        { get; set; }
}

public class Unit
{
    public virtual int      Id          { get; set;}
    public virtual string   Name        { get; set;}
}

これが私がFluentNHibernateマッピングを行った方法です。

public class UserMap : ClassMap<User>
{
    public UserMap()
    {
        Id(x => x.Id).GeneratedBy.Identity().Column("UserId");
        Map(x => x.FirstName);
        Map(x => x.LastName);
        References(x => x.Unit).Column("UnitId");
    }
}

public class UnitMap : ClassMap<Unit> 
{        
    public UnitMap() 
    {
        Table("Unit");
        LazyLoad();
        Id(x => x.Id).GeneratedBy.Identity().Column("UnitId");
        Map(x => x.Name).Column("Name").Not.Nullable();
        HasMany(x => x.Users).KeyColumn("UnitId");
    }
}

これが私の質問です。ユーザーのユニットIDのみがあり、完全なユニットオブジェクトではなく、ユニットがデータベース(以前に作成された)にすでに存在する場合、新しいユーザーを作成するにはどうすればよいですか?このようなもの:

public class TestClass
{
    // Adding a user to a unit example
    public void SavingAUser(int unitId)
    {
        var user = new User
        {
            FirstName = "TestFirstName",
            LastName = "TestLastName",
            Unit = new Unit() // <-- I have only the Id of the unit I don't actually have a unit object here I don't want to query the DB to get the full object, I already have the Id 
        };

        var userRepository = new UserRepository();
        userRepository.Save(user);
    }
}

どうすればこのようなことをすることができますか。私が理にかなっていることを願っています。そうでない場合は、さらに説明を追加することを知らせてください。また、これは非常に一般的なシナリオであると確信しています

4

1 に答える 1

2

プロキシをフェッチせずにユニットに返すことができます。

    var user = new User
    {
        FirstName = "TestFirstName",
        LastName = "TestLastName",
        Unit = Session.Load<Unit>(unitId)
    }

セッションオブジェクトを公開する必要があります。

于 2013-02-23T09:02:30.350 に答える