簡體   English   中英

映射Fluent NHibernate,其中主鍵也應該是外鍵

[英]Mapping Fluent NHibernate where the primary key should also be a foreign key

我有一個像這樣的用戶對象:

public class User
{
    public Guid UserId { get; set; }
    public string UserName { get; set; }
    ...
}

這是在nhibernate中流暢映射的:

public class UserMap : ClassMap<User>
{
    public UserMap()
    {
        Id(x => x.UserId).Column("UserId");
        Map(x => x.UserName).Not.Nullable();
        ...
    }
}

我正在嘗試構建一個與用戶對象分開的憑據塊,因此密碼和salt不會在用戶類中攜帶,如下所示:

public class UserCredential
{
    public User User { get; set; }
    public byte[] Password { get; set; }
    public string Salt { get; set; }
}

...但我無法弄清楚如何正確映射這個。 最終,在數據庫中,我希望在UserCredentials表中看到UserId列, UserCredentialsUsers表的主鍵,也是Users表的外鍵。 Users表應該沒有對UserCredentials表的引用。 我該如何編寫ClassMap<UserCredential>類?

這似乎是one-to-one關系,因此將使用FNH中的HasOne進行映射。

    public UserCredentialMap()
    {
        Id(x => x.Id)
            .Column("UserId")
            .GeneratedBy.Foreign("User");

        HasOne(x => x.User).Constrained();
    }

您也可以像這樣映射它:

public UserCredentialMap()
{
    Id(x => x.Id, "UserId");

    References(x => x.User, "UserId")
            .Not.Update()
            .Not.Insert();
}

因為你不想給Credentials它自己的主鍵,在我看來你真正想要的是一個組件更多細節 )。

這意味着Credential數據與User數據存儲在同一個表中,但在您的域中將其建模為單獨的對象,這是User類的屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM