Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 映射主键也应为外键的Fluent NHibernate_C#_Nhibernate_Fluent Nhibernate - Fatal编程技术网

C# 映射主键也应为外键的Fluent NHibernate

C# 映射主键也应为外键的Fluent NHibernate,c#,nhibernate,fluent-nhibernate,C#,Nhibernate,Fluent Nhibernate,我有这样一个用户对象: 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).Colu

我有这样一个用户对象:

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();
        ...
    }
}

…但我不知道如何正确地映射这个。最后,在数据库中,我希望在
UserCredentials
表中看到一个
UserId
列,它既是
Users
表的主键,也是外键。
Users
表不应引用
UserCredentials
表。如何编写
ClassMap
类?

这似乎是一种
一对一的关系,因此将在FNH中使用
HasOne
进行映射

例子 您也可以这样映射它:

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

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

因为你不想给
凭证
它自己的主键,所以在我看来,你真正想要的是一个()


这意味着
凭证
数据与
用户
数据存储在同一个表中,但在您的域中作为单独的对象进行建模,该对象是您的用户类的属性。

您可以对此进行扩展吗?我将如何为此编写类映射?HasOne()是否替换Id()?如何将UserId指定为主键和外键?我在上面提供了一个例子。好的,谢谢。。。您指定的
Id
属性应该是
User
属性,还是意味着我需要在类中为此创建一个新属性?我的意思是您将在
UserCredential
中拥有一个Id属性。再看看我的替代映射。那。。。听起来很有趣!我会看看我是否能想出办法让这一切顺利进行。我想这并不能满足我的需要;我不希望从
用户
对象外部访问凭据信息。。。我希望仅在凭据对象中管理关系。我能用一个组件做到这一点吗?至少对我来说,这似乎没有意义,为什么
凭证
对象拥有
用户
,而不是相反?所有权。。。这个词可能不对。这是一件容易接近的事情。我想在类库中管理密码和salt,并传递一个不包含身份验证信息的用户对象。我的成员资格提供者将是唯一访问凭证类的东西(我可能会将其设置为内部)。这有意义吗?凭证对象将只引用一个用户。在数据库设计中,这是此类情况的常见做法,因为当外键受到唯一约束时,创建另一列是没有意义的。在继承模型中也会看到很多这种情况。
    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();
}