我正在使用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(..)
。
为什么不花费我的长度?
答案 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)。
您可能错误地使用int
和int
而不是sbyte
,可以指定比例和精度(但不是它的长度,这将是DB供应商特定的)。