2010-10-12 203 views
4

在HBM映射我可以设置类型和长度

<composite-id> 
    [..] 
    <key-property name="someStringProperty" 
       column="somefield" 
       type="AnsiString" 
       lenght="8"/> 
</composite-id> 

我如何做到这一点(设置类型和长度)的流利?我发布了这个support.fluentnhibernate.org。我包括一些修改以支持将类型设置为例如AnsiString在那里。

编辑2:
今天,Paul Batum在他的开发分支中添加了对文本类型和长度的支持。 (见github上进行更改。)
这使得有可能写

CompositeId() 
    .KeyProperty(
     p => p.SomeProp, 
     k => k.ColumnName("someField").Type("AnsiString").Length(8)) 
+0

我看到.ColumnName()和.Type()而不是.Length()。使用流利NHibernate的1.1.1.694。 – 2011-02-15 15:04:20

+0

我想它还没有落在树干里。 – 2011-02-15 15:18:09

+0

这是美丽的。谢谢。在流利的维基上没有提到这一点。 – Lombas 2017-02-24 17:46:32

回答

1

好像你不能。你只能去......

CompositeId() 
     .KeyProperty(x => x.Id1, "ID1") 
     .KeyProperty(x => x.Id2, "ID2"); 

没有类型或长度的选项。

但是在1.1版本似乎有一种可能性

CompositeId() 
      .KeyProperty(x => x.Id1) 
      .KeyProperty(x => x.Id2, kp => kp 
       .ColumnName("ID2") 
       .Type(typeof(string))); 
+0

但流畅的Type(typeof(string))仍然导致nvarchar映射,而hbm'type =“AnsiString”'产生varchar映射!?那么根本没有收费? – Nils 2010-10-12 15:25:22

+0

似乎喜欢它。尽管看起来他们将来可能会添加CustomType。谁知道。您可能想要开始讨论将其添加到http://support.fluentnhibernate.org/上的API。 – RonaldV 2010-10-12 21:55:07

+0

好的。这个答案是正确的。目前不可能在复合关键部件上设置长度属性,而只能设置类型为.net-types。请参阅问题上的编辑以获取更多信息的链接。 – Nils 2010-10-13 09:42:12

2

我更新到1.2和我能够一键属性的类型设置为AnsiString类型

  CompositeId() 
      .KeyReference(x => x.ViewDto, "type_id") 
      .KeyProperty(x => x.FieldName, p => 
               { 
                p.ColumnName("field_name"); 
                p.Type("AnsiString"); 
               });