Fluent NHibernate导出int / sbyte / byte length忽略

时间:2017-05-13 21:35:26

标签: c# nhibernate fluent-nhibernate

我正在使用Fluent NHibernate在C#中做一个项目。为了简单起见,我使用添加的映射自动生成数据库。我得到了这个映射:

Table("sometable");
LazyLoad();
Id(x => x.Id).Column("id").Length(11).GeneratedBy.Identity();
Map(x => x.Name).Column("name").Length(20).Not.Nullable();
Map(x => x.Count).Column("count").Length(2).Not.Nullable();

我得到了这个:

public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual sbyte Count { get; set; }

在我的实体课程中。导出代码是:

.ExposeConfiguration(config =>
{
    new SchemaUpdate(config).Execute(false, true);
})

现在,Name的长度是正确的,但是,我的sbyte总是得到长度4,我的int总是长度为11,无论我设置为Length(..)

为什么不花费我的长度?

1 个答案:

答案 0 :(得分:0)

/** * @Rest\Post("/folder") * @Rest\View(StatusCode = 201) * @ParamConverter( * "folder", * converter="fos_rest.request_body", * options={ * "validator"={ "groups"="Create" } * } * ) * */ public function createAction(Folder $folder, ConstraintViolationList $violations) { if (count($violations)) { return $this->view($violations, Response::HTTP_BAD_REQUEST); } $em = $this->getDoctrine()->getManager(); $em->persist($folder); $em->flush(); return $folder; } 映射到sbyte,其中DB中的实际大小是特定于供应商的(可能消耗更多,而容量仍然只有1个字节)。 DbType.SByte相同,映射到int,容量为4个字节。

这些类型不是为了指定它们的大小而是试图设置它们的长度被忽略。这不是NHibernate的限制,而是那些类型的限制。一个字节是一个字节,它的容量不能超过一个字节。 C#中的DbType.Int32总是容量为4个字节(即使运行x64)。

您可能错误地使用intint而不是sbyte,可以指定比例和精度(但不是它的长度,这将是DB供应商特定的)。