2011-08-02 20 views
1

ドメイン:流暢NHibernateのマッピングヘルプ

public class Account 
{ 

    public virtual int AccountId { get; set; } 
    public virtual int UserId { get; set; } 
    public virtual string HostName { get; set; } 
    public virtual DateTime CreatedOn { get; set; } 
    public virtual bool Deleted { get; set; } 
} 

public class Person 
{ 
    public Person() 
    { 
     PersonRoles = new List<PersonRole>(); 
    } 
    public virtual int PersonId { get; set; } 
    public virtual Guid PersonGuid { get; set; } 
    public virtual string FirstName { get; set; } 
    public virtual string Surname { get; set; } 
    public virtual string Email { get; set; } 
    public virtual string Password { get; set; } 
    public virtual string SaltKey { get; set; } 
    public virtual int PersonType { get; set; } 
    public virtual DateTime CreatedOn { get; set; } 
    public virtual bool Deleted { get; set; } 
    public virtual bool Active { get; set; } 
    public virtual int? AccountId { get; set; } 

    public virtual ICollection<PersonRole> PersonRoles { get; private set; } 
    public virtual Account Account { get; set; } 
} 

マッピング:

public AccountMap() 
    { 
     Id(x => x.AccountId, "AccountId").Column("AccountId"); 
     Map(x => x.UserId); 
     Map(x => x.HostName); 
     Map(x => x.CreatedOn); 
     Map(x => x.Deleted); 
     Table("crm_accounts"); 
    } 

    public PersonMap() 
    { 
     Id(x => x.PersonId).Column("PersonId"); 
     Map(x => x.PersonGuid); 
     Map(x => x.FirstName); 
     Map(x => x.Surname); 
     Map(x => x.Email); 
     Map(x => x.Password); 
     Map(x => x.SaltKey); 
     Map(x => x.PersonType); 
     Map(x => x.CreatedOn); 
     Map(x => x.Deleted); 
     Map(x => x.Active); 

     HasManyToMany<PersonRole>(x => x.PersonRoles) 
      .ParentKeyColumn("RoleId") 
      .ChildKeyColumn("PersonId") 
      .Cascade.All() 
      .Table("crm_people_roles_mapping"); 

     //Map(x => x.AccountId); 
     References(x => x.Account, "AccountId").Column("AccountId"); 
     Table("crm_people"); 
    } 

問題:

アカウントIDのすべてに新しい人を保存するアカウントIDフィールドを除くOK節約できます。

人は存在するアカウントを持つ必要はありません。

私は間違っていますか?

ありがとうございました。

答えて

1

HNibernateはあなたのAccountIdで何をすべきか分かりません。あなたのオブジェクトには、AccountとAccountIdプロパティがあります。あなたがそれを保存する前にあなたがその人にアカウントを割り当てたら、それはすべて働き始めるでしょう。

このAccountIdプロパティを削除します。あなたはそれを必要としません。

+0

AccountIdプロパティを取得しないと言うと、ドメイン内のことを意味しますか?編集:ああ、ありがとう、ありがとう。ドメインから削除され、動作しているようです。 – izip

+0

はい。あなたはすでにAccountプロパティを持っていて、IDを持っています。ルートオブジェクト上のIDは冗長で混乱します。 –

+0

ねえ、私の驚くべき答えをupvoteすることを忘れないでください。 :) –