在 FluetnNhibernate 中映射自定义类型

问题描述 投票:0回答:1

我有2节课。

public class Name
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

class Person
{
    public virtual Name Name { get; set; }
    public virtual int Age { get; set; }
}

我想将 Person 映射到数据库,如下所示:

| First Name | LastName | Age |

我尝试为 Name 创建 IUserType 实现。但这里

public SqlType[] SqlTypes
    {
        get { return new[] { new SqlType(DbType.String), new SqlType(DbType.String) }; }
    }

我有一个例外

property mapping has wrong number of columns
nhibernate fluent-nhibernate mapping iusertype
1个回答
3
投票

您实际上要求的是一个组件:

https://github.com/jagregory/ Fluent-nhibernate/wiki/Fluent-mapping#componentmap

你的班级地图看起来像:

public class NameComponent : ComponentMap<Name>
{
    public NameComponent()
    {
        Map(x => x.FirstName);
        Map(x => x.LastName);
    }
}

public class PersonMap : ClassMap<Person>
{
    public PersonMap()
    {
        Id(x => x.Id)...
        Map(x => x.Age);
        Component(x => x.Name);
    }
}

这会将名字/姓氏作为两个单独的列映射到同一个人表。但在你的 Person 上给你一个 Name 对象。


如果您需要 AutoMap 组件,请查看此博客:

https://web.archive.org/web/20190212181857/http://www.jagregory.com:80/writings/ Fluent-nhibernate-auto-mapping-components/

© www.soinside.com 2019 - 2024. All rights reserved.