0

古い設計のデータベース スキーマがあり、それを Fluent-Nhibenrate でマッピングしたいと考えています。

スキーマは次のようになります。

Table:Users
ID Number PK

Table:Kiosk
User_ID Number PK, FK -> Users.ID
Xml Varchar

Table:Email
User_ID Number PK, FK -> Users.ID
Update_Date Date

そして、次のようなマッピング オブジェクトで達成したいと考えています。

public class User
{
    private virtual Email _email {get;set;}

    public virtual int Id {get;set;}
    public virtual string Email
    {
        get
        {
            return _email.Email;
        }
        set
        {
            _email.Email = value;
            _email.UpdateDate = DateTime.Now();
        }
    }

    public virtual Kiosk Kiosk {get;set;}

    public virtual bool HasKiosk
    {
        get
        {
            return (Kiosk != null);
        }
    }
}

public class Kiosk
{
    public virtual string XmlKiosk {get;set;}
}

public class Email
{
    public virtual string Email {get;set;}
    public virtual DateTime UpdateDate {get;set;}
}

何か案は?

よろしくお願いします、アミール。

4

1 に答える 1

0

この記事を使用し て、「キオスク」クラスと「メール」クラスを少し変更するだけで、私が望んでいたことを達成しました...

結果は次のとおりです。

public class Kiosk
{
    private int UserId {get;set;}
    private User User {get;set;}

    protected Kiosk();

    public Kiosk(User user)
    {
        User = user;
    }

    public virtual string XmlKiosk {get;set;}
}

public class Email
{
    private int UserId {get;set;}
    private User User {get;set;}

    protected Email();

    public Email(User user)
    {
        User = user;
    }   

    public virtual string Email {get;set;}
    public virtual DateTime UpdateDate {get;set;}
}

そして、マッピングは次のようになります。

    Public class UserMapping : IAutoMappingOverride<User>
    {
        public void override Map(AutoMapping<User> mapping)
        {
            mapping.Id(o => o.Id) // Not needed, already mapped with auto mapper, just for the example...

            mapping.HasOne(o => o.Kiosk)
                .Cascade.All();
            mapping.HasOne(Reveal.Member<User, Email>("_email"))
                .Cascade.All();

            mapping.IgnoreProperty(o => o.HasKiosk); // Simple getter, no mapping needed here.
        }
    }

    public class KioskMapping : IAutoMappingOverride<Kiosk>
    {
        public void override Map(AutoMapping<Kiosk> mapping)
        {
            mapping.Id(Reveal.Member<Kiosk>("UserId"), "ColumnName");

            mapping.HasOne<User>(Reveal.Member<Kiosk, User>("User")
                .Constrained()
                .ForeignKey();
        }
    }

    public class EmailMapping : IAutoMappingOverride<Email>
    {
        public void override Map(AutoMapping<Email> mapping)
        {
            mapping.Id(Reveal.Member<Email>("UserId"), "ColumnName");

            mapping.HasOne<User>(Reveal.Member<Email, User>("User")
                .Constrained()
                .ForeignKey();
        }
    }       

チャームのように機能します、みんなありがとう。

于 2012-05-06T11:29:53.350 に答える