Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.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
Postgresql 如何将字符串属性映射到数据库中的二进制列?_Postgresql_Fluent Nhibernate_Binary_Fluent Nhibernate Mapping - Fatal编程技术网

Postgresql 如何将字符串属性映射到数据库中的二进制列?

Postgresql 如何将字符串属性映射到数据库中的二进制列?,postgresql,fluent-nhibernate,binary,fluent-nhibernate-mapping,Postgresql,Fluent Nhibernate,Binary,Fluent Nhibernate Mapping,我有一个用户实体的类。其中一个属性是用户的密码(实际上是散列)。我将其设置为字符串(简化的代码): 还有一个流畅的NHibernate映射(简化的代码): 公共类用户映射:类映射 { 公共用户映射() { 表(“用户”); Id(x=>x.Id).GeneratedBy.Sequence(“users\u Id\u seq”); Map(x=>x.Password);//我在这里放什么??? } } 数据库列是PostgreSQL上的数据类型。上面的映射不起作用,因为属性是string(tex

我有一个用户实体的类。其中一个属性是用户的密码(实际上是散列)。我将其设置为字符串(简化的代码):

还有一个流畅的NHibernate映射(简化的代码):

公共类用户映射:类映射
{
公共用户映射()
{
表(“用户”);
Id(x=>x.Id).GeneratedBy.Sequence(“users\u Id\u seq”);
Map(x=>x.Password);//我在这里放什么???
}
}

数据库列是PostgreSQL上的数据类型。上面的映射不起作用,因为属性是string(text)。我该怎么办?

您可以将
密码
设置为公共属性,该属性仅用于引用基础私有属性
哈希密码

大概是这样:

受保护的虚拟字节[]/*或任何类型的*/HashedPassword{get;set;}
公共虚拟字符串密码
获取
{
return(string)(HashedPassword);//或者您希望将其转换为string的方式…
}
设置
//…


然后,您可以告诉fluent nHib忽略您的密码属性

您可以将
Password
设置为公共属性,该属性仅用于引用基础私有属性
HashedPassword

大概是这样:

受保护的虚拟字节[]/*或任何类型的*/HashedPassword{get;set;}
公共虚拟字符串密码
获取
{
return(string)(HashedPassword);//或者您希望将其转换为string的方式…
}
设置
//…


然后,您可以告诉fluent nHib忽略您的密码属性

这里是最后一个双向(读写)的解决方案,我之前尝试的方法无法正常工作。希望这能帮助别人

public class User
{
    private byte[] _password;

    public virtual int Id { get; private set; }

    public virtual string Password
    { 
        get { return System.Text.Encoding.Unicode.GetString(_password); }
        set { _password = System.Text.Encoding.Unicode.GetBytes(value); }
    }
}

public class UserMap : ClassMap<User>
{
    public UserMap()
    {
        Table("users");
        Id(x => x.Id).GeneratedBy.Sequence("users_id_seq");
        Map(x => x.Password)
            .Access.LowerCaseField(Prefix.Underscore)
            .CustomType<byte[]>();
    }
}
公共类用户
{
专用字节[]_密码;
公共虚拟整数Id{get;private set;}
公共虚拟字符串密码
{ 
获取{return System.Text.Encoding.Unicode.GetString(_password);}
set{u password=System.Text.Encoding.Unicode.GetBytes(value);}
}
}
公共类UserMap:ClassMap
{
公共用户映射()
{
表(“用户”);
Id(x=>x.Id).GeneratedBy.Sequence(“users\u Id\u seq”);
映射(x=>x.Password)
.Access.LowerCaseField(前缀.下划线)
.CustomType();
}
}

这里是最终的解决方案,它可以双向工作(读写),我之前尝试的方法无法正常工作。希望这能帮助别人

public class User
{
    private byte[] _password;

    public virtual int Id { get; private set; }

    public virtual string Password
    { 
        get { return System.Text.Encoding.Unicode.GetString(_password); }
        set { _password = System.Text.Encoding.Unicode.GetBytes(value); }
    }
}

public class UserMap : ClassMap<User>
{
    public UserMap()
    {
        Table("users");
        Id(x => x.Id).GeneratedBy.Sequence("users_id_seq");
        Map(x => x.Password)
            .Access.LowerCaseField(Prefix.Underscore)
            .CustomType<byte[]>();
    }
}
公共类用户
{
专用字节[]_密码;
公共虚拟整数Id{get;private set;}
公共虚拟字符串密码
{ 
获取{return System.Text.Encoding.Unicode.GetString(_password);}
set{u password=System.Text.Encoding.Unicode.GetBytes(value);}
}
}
公共类UserMap:ClassMap
{
公共用户映射()
{
表(“用户”);
Id(x=>x.Id).GeneratedBy.Sequence(“users\u Id\u seq”);
映射(x=>x.Password)
.Access.LowerCaseField(前缀.下划线)
.CustomType();
}
}
我做的有点不同:但都是一样的。这个想法来自于感谢!我做的有点不同,但都是一样的。这个想法来自于感谢!
public class User
{
    private byte[] _password;

    public virtual int Id { get; private set; }

    public virtual string Password
    { 
        get { return System.Text.Encoding.Unicode.GetString(_password); }
        set { _password = System.Text.Encoding.Unicode.GetBytes(value); }
    }
}

public class UserMap : ClassMap<User>
{
    public UserMap()
    {
        Table("users");
        Id(x => x.Id).GeneratedBy.Sequence("users_id_seq");
        Map(x => x.Password)
            .Access.LowerCaseField(Prefix.Underscore)
            .CustomType<byte[]>();
    }
}