天道酬勤,学无止境

流利的NHibernate列映射与保留字(Fluent NHibernate Column Mapping with Reserved Word)

问题

我已经读过,使用反勾号`应该允许使用保留字。 我正在使用SQL Server和Fluent NHibernate,并且具有列名“ File”。 如果我用

"`File" 

它尝试使用

[Fil]

因此它正确地添加了括号,但从末尾删除了“ e”。 如果我将其映射为

"`Filee"

它用

[File]

正确地。

我是在做错什么,还是NHibernate或Fluent Nhibernate中的错误?

回答1

您需要在两面都放`,如下所示:

"`File`"

正如@Astaar所说,完整的语法是:

Map(x => x.File).Column("`File`");
回答2

完全清楚地说,确切的语法是

Map(x => x.File).Column("`File`");
回答3

此处涵盖了一些非手动配置选项:NHibernate:在模式导出中是否强制使用方括号?

以及替代方法:Fluent NHibernate和PostgreSQL,SchemaMetadataUpdater.QuoteTableAndColumns-System.NotSupportedException:不支持指定的方法

例如SchemaMetadataUpdater.QuoteTableAndColumns(cfg) ,在FluentNhibernate中看起来像

var config = Fluently.Configure()
   ...
   ...
   .ExposeConfiguration(cfg => SchemaMetadataUpdater.QuoteTableAndColumns);

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 流利的NHibernate HasManyToMany()映射(Fluent NHibernate HasManyToMany() Mapping)
    问题 我在使用多对多关系的Fluent NHibernate示例中遇到问题。 我试图找出类似案例的例子,但发现了很多吨,但我仍然遇到同样的问题。 运行测试项目时,将引发以下异常: NHibernate.PropertyAccessException:项目.Entities.User.UserName的吸气剂发生异常---> System.Reflection.TargetException:对象与目标类型不匹配。 这是表的图像: 和代码 public UsersMap() { this.Table("Users"); Id(x => x.UserName).Column("Username").GeneratedBy.Assigned(); Map(x => x.FirstName); Map(x => x.LastName); Map(x => x.Password); Map(x =>x.EMail); Map(x => x.Title); Map(x => x.Division); HasManyToMany<User>(x => x.Roles) .Table("UserInRoles").ParentKeyColumn("Username") .ChildKeyColumn("Usernamepk") .Cascade.SaveUpdate().LazyLoad(); }
  • 如何在流利的NHibernate中加入表(How to join table in fluent nhibernate)
    问题 我们如何做到这种映射却又流利呢? <class name="Person" table="People"> <id name="Id"> <generator class="identity"/> </id> <property name="Name" /> <join table="Addresses"> <key column="PersonId"/> <property name="Line1"/> <property name="Line2"/> <property name="City"/> <property name="Country"/> <property name="ZipCode"/> </join> </class> 我知道我可以使用“参考”,但是我不需要相关表中的所有列。 我只需要一个财产。 回答1 帕科说的话不对。 这可以在Fluent NHibernate中完成。 我自己上网搜索了很长时间,找不到任何人在谈论这个选项,所以我只是和FNHibernate玩了一会儿,最后设法做到了。 这是我的情况: 我有两个桌子- "FormFields" => Columns { "FieldId", "FieldName", "FieldType", "DisplayOrder" } "FormStructure" => Columns { "FormId",
  • 如何使用流利的NHibernate将枚举映射为int值?(How do you map an enum as an int value with fluent NHibernate?)
    问题 问题确实如此,默认是将其映射为string但我需要将其映射为int 。 我目前正在使用PersistenceModel来设置我的约定,如果有什么不同的话。 提前致谢。 更新发现从主干上获取最新版本的代码解决了我的麻烦。 回答1 定义此约定的方式有时是在以前更改的,现在是: public class EnumConvention : IUserTypeConvention { public void Accept(IAcceptanceCriteria<IPropertyInspector> criteria) { criteria.Expect(x => x.Property.PropertyType.IsEnum); } public void Apply(IPropertyInstance target) { target.CustomType(target.Property.PropertyType); } } 回答2 因此,如上所述,从后备箱中获取最新版本的Fluent NHibernate将我带到了我需要的地方。 具有最新代码的枚举的映射示例为: Map(quote => quote.Status).CustomTypeIs(typeof(QuoteStatus)); 自定义类型强制将其作为枚举的实例进行处理,而不是使用GenericEnumMapper<TEnum
  • 在Fluent Nhibernate中设置实体和关系上的缓存?(Set up caching on entities and relationships in Fluent Nhibernate?)
    问题 有没有人举过一个例子,说明如何设置以及要在流畅的nhibernate中缓存哪些实体。 既使用流利的映射又使用自动映射? 一对多和多对多的实体关系也一样吗? 回答1 我一直在类似的情况下工作,我只想缓存特定的元素,并希望这些元素在启动时被加载一次,并保留在缓存中,直到应用程序关闭。 这是只读缓存,用于填充国家/地区列表,以便用户可以从列表中选择其国家/地区。 我使用fluentNhibernate映射,并使用Cache.readonly()定义了Country我的班级。 public class CountryMap : ClassMap<Country> { public CountryMap() { Schema("Dropdowns"); Cache.ReadOnly(); // Class mappings underneath } } 我的用户类映射如下所示: public class UserMap : ClassMap<User> { Id(x => x.Id).Column("UserId"); Map(x => x.FirstName); Map(x => x.LastName); References(x => x.Country) .Column("CountryId"); } 我手动将Fluent Nhibernate配置为使用二级缓存。 因此
  • 用流利的hibernate映射枚举(Mapping enum with fluent nhibernate)
    问题 我正在按照http://wiki.fluentnhibernate.org/Getting_started教程使用Fluent NHibernate创建我的第一个NHibernate项目。 我有2张桌子 1)带有字段的帐户 Id AccountHolderName AccountTypeId 2)带字段的AccountType Id AccountTypeName 现在,帐户类型可以是Savings或Current,因此表AccountTypes存储2行1-Savings 2-Current 对于AccoutType表,我已经定义了枚举 public enum AccountType { Savings=1, Current=2 } 对于“帐户”表,我定义实体类 public class Account { public virtual int Id {get; private set;} public virtual string AccountHolderName {get; set;} public virtual string AccountType {get; set;} } 流利的nhibernate映射为: public AgencyMap() { Id(o => o.Id); Map(o => o.AccountHolderName); Map(o => o
  • NHibernate.Spatial和Sql 2008地理类型-如何配置(NHibernate.Spatial and Sql 2008 Geography type - How to configure)
    问题 我正在尝试将Nhibernate与Sql 2008 Geography类型一起使用,并且遇到了困难。 我正在使用Fluent Nhibernate进行配置,这对我来说还很新,所以也可能是问题所在。 首先,我要坚持的课程看起来像这样: public class LocationLog : FluentNHibernate.Data.Entity { public virtual new int Id {get;set;} public virtual DateTime TimeStamp {get;set;} public virtual GisSharpBlog.NetTopologySuite.Geometries.Point Location {get;set;} } 映射类如下所示: public class LocationLogMap : ClassMap<LocationLog> { ImportType<GisSharpBlog.NetTopologySuite.Geometries.Point>(); Id(x => x.Id); Map(x => x.TimeStamp).Generated.Insert(); Map(x => x.Location); } 为了在Fluent Nhibernate中使用MsSql2008GeographyDialect
  • 从流畅的Nhibernate生成XML映射(Generate XML mappings from fluent Nhibernate)
    问题 如何在MappingIntegrationTests中的测试中生成xml映射文件 我需要手动检查流利的映射是否与旧项目中的映射相关。 回答1 您可以执行以下操作: config.Mappings(m => { m.FluentMappings.ExportTo("...file path here..."); m.HbmMappings.ExportTo("...file path here..."); m.AutoMappings.ExportTo("...file path here..."); { ); 我自己不喜欢如果我找到更好的方法(如果确实存在),我将更新答案。 看 http://blog.jagregory.com/2009/02/03/fluent-nhibernate-configuring-your-application/ 或者,如果损坏,请改为查看此内容 https://github.com/jagregory/fluent-nhibernate/wiki/数据库配置 回答2 您可以通过调用ExportTo()方法来生成XML映射。 例如: ISessionFactory sessionFactory = FluentNHibernate.Cfg.Fluently.Configure() .Database(FluentNHibernate.Cfg
  • 流利的NHibernate多对多(Fluent NHibernate Many-to-Many)
    问题 我正在使用Fluent NHibernate,但在与我的一个班级建立多对多关系时遇到了一些问题。 这可能是一个愚蠢的错误,但为了使它正常工作,我已经被卡住了一点。 无论如何,我有几个具有很多关系的课程。 public class Person { public Person() { GroupsOwned = new List<Groups>(); } public virtual IList<Groups> GroupsOwned { get; set; } } public class Groups { public Groups() { Admins= new List<Person>(); } public virtual IList<Person> Admins{ get; set; } } 映射看起来像这样 人: ... HasManyToMany<Groups>(x => x.GroupsOwned) .WithTableName("GroupAdministrators") .WithParentKeyColumn("PersonID") .WithChildKeyColumn("GroupID") .Cascade.SaveUpdate(); 群组:... HasManyToMany<Person>(x => x.Admins) .WithTableName
  • 流利的nHibernate:一对多关系问题(Fluent nHibernate: one-to-many relationship Issue)
    问题 我的一对多关系有问题。 我有以下域类: public class Installation : Entity<Installation> { public virtual string Name { get; set; } public virtual IList<Institution> Institutions { get; set; } public Installation() { Institutions = new List<Institution>(); } } public class Institution : Entity { public virtual string Name { get; set; } public virtual string Address { get; set; } public virtual string City { get; set; } public virtual Installation Installation { get; set; } } 我根据下面的帖子做了Entity基类。 我定义了以下映射: public class InstitutionMapping : ClassMap<Institution> { public InstitutionMapping() { WithTable(
  • Inheritance Mapping with Fluent NHibernate
    Given the following scenario, I want map the type hierarchy to the database schema using Fluent NHibernate. I am using NHibernate 2.0 Type Hierarchy public abstract class Item { public virtual int ItemId { get; set; } public virtual string ItemType { get; set; } public virtual string FieldA { get; set; } } public abstract class SubItem : Item { public virtual string FieldB { get; set; } } public class ConcreteItemX : SubItem { public virtual string FieldC { get; set; } } public class ConcreteItemY : Item { public virtual string FieldD { get; set; } } See image The Item and SubItem classes are
  • 亚音速VS NHibernate [关闭](Subsonic Vs NHibernate [closed])
    问题 关门了。 这个问题是基于意见的。 它当前不接受答案。 想要改善这个问题吗? 更新问题,以便可以通过编辑此帖子以事实和引用的形式回答。 3个月前关闭。 改善这个问题 什么时候使用这些工具中的一个不利于另一个工具的共识是什么? 我发现Subsonic在快速完成工作方面非常有用,但是在大型项目中,它往往无法扩展,并且将您的域模型与数据库模型联系在一起。 这就是Nhibernate出现的地方,因为它为您提供了与数据库模型无关的轻量级POCO,但是建立时间更长。 回答1 我经常被问到这个问题,实际上归结为您想花多少钱。 我无法告诉您Chris Cyvas的评论RE SubSonic缩放的破坏性如何-自从:(。 这笔交易是-明智的选择,SubSonic的扩展性非常好。 就项目增长而言-您使用的任何工具都需要引起您的注意。 甚至NHibernate。 我写了一篇关于如何在SubSonic 2.1中将存储库模式用于DI(就像使用NHIb或其他工具一样)的文章: http://blog.wekeroad.com/blog/subsonic-writing-decoupled-testable-code-with-subsonic-2-1/ 我还写了一篇有关SubSOnic性能的文章: http://blog.wekeroad.com/blog/subsonic-scaling/ 希望这可以帮助
  • Fluent NHibernate Column Mapping with Reserved Word
    I've read that using a back tick ` should allow for using of reserved words. I'm using SQL Server and Fluent NHibernate and have a column name "File". If I map it with "`File" it tries using [Fil] so it's adding the brackets correctly, but dropping the "e" from the end. If I map it as "`Filee" it uses [File] correctly. Am I doing something wrong or is this a bug in NHibernate or Fluent Nhibernate?
  • 流利的接口-方法链接(Fluent Interfaces - Method Chaining)
    问题 方法链接是我知道的建立流畅接口的唯一方法。 这是C#中的示例: John john = new JohnBuilder() .AddSmartCode("c#") .WithfluentInterface("Please") .ButHow("Dunno"); Assert.IsNotNull(john); [Test] public void Should_Assign_Due_Date_With_7DayTermsVia_Invoice_Builder() { DateTime now = DateTime.Now; IInvoice invoice = new InvoiceBuilder() .IssuedOn(now) .WithInvoiceNumber(40) .WithPaymentTerms(PaymentTerms.SevenDays) .Generate(); Assert.IsTrue(invoice.DateDue == now.AddDays(7)); } 那么其他人如何创建流畅的界面。 您如何创建它? 需要什么语言/平台/技术? 回答1 您可以使用任何版本的.NET或任何其他面向对象的语言来创建流畅的界面。 您需要做的就是创建一个对象,该对象的方法始终返回该对象本身。 例如在C#中: public class JohnBuilder {
  • NHibernate与LINQ to SQL(NHibernate vs LINQ to SQL)
    问题 作为没有在现实世界项目中使用这两种技术的人,我想知道是否有人知道这两者是如何互补的以及它们的功能有多少重叠? 回答1 LINQ to SQL强制您使用每类表模式。 使用此模式的好处在于,它易于实现且易于操作,并且只需花费很少的精力即可使您的域基于现有的数据库结构运行。 对于简单的应用程序,这是完全可以接受的(并且有时甚至更可取),但是对于更复杂的应用程序,开发人员通常会建议改用域驱动的设计模式(这是NHibernate所促进的)。 每类表模式的问题在于您的数据库结构直接影响您的域设计。 例如,假设您有一个“客户”表,其中包含以下列来保存客户的主要地址信息: 街道地址城市状态压缩 现在,假设您也要为客户的邮寄地址添加列,以便在“客户”表中添加以下列: MailingStreetAddress 邮寄城市邮件状态邮递区号 使用LINQ to SQL,您域中的Customer对象现在将具有这八个列中每个列的属性。 但是,如果您遵循域驱动的设计模式,则可能已经创建了一个Address类,并且让Customer类拥有两个Address属性,一个属性用于邮件地址,另一个属性用于其当前地址。 这是一个简单的示例,但它演示了“每类表”模式如何导致有些臭味的域。 最后,取决于您。 同样,对于只需要基本CRUD(创建,读取,更新,删除)功能的简单应用程序而言,LINQ to
  • DateTime precision in NHibernate and support for DateTime2 in NHibernate SchemeExport
    I am then using Fluent NHibernate and its automapping feature to map the the following simplified POCO class: public class Foo { public virtual int Id { get; set; } public virtual datetime CreatedDateTime { get; set; } } The CreatedDateTime field will map to a SQL DateTime by default. However if I do a test to check that the entity is being created correctly it fails. This is because the precision of the DateTime field is not maintained through to the SQL database. I undersatnd the reason behind this to be that a MS SQL Server DateTime can only hold milisecond precision by rounded to
  • Fluent NHibernate HasManyToMany() Mapping
    I am having a problem in Fluent NHibernate example utilizing the Many-to-Many relationships. I tried to find out examples on a similar case, and I found tons, but I'm still having the same problem. When running the test project, the following exception is thrown: NHibernate.PropertyAccessException: Exception occurred getter of project.Entities.User.UserName ---> System.Reflection.TargetException: Object does not match target type. This is an image of the tables: and the code public UsersMap() { this.Table("Users"); Id(x => x.UserName).Column("Username").GeneratedBy.Assigned(); Map(x => x
  • 使用NHibernate进行一对多映射的最小和正确方法(Minimal and correct way to map one-to-many with NHibernate)
    问题 我是NHibernate和C#的新手,所以请保持柔和! 我有以下两个NHibernate实体: Employee { private long _id; private String _name; private String _empNumber; private IList<Address> _addresses; //Properties... } 和 Address { private long _id; private String _addrLine1; private String _addrLine2; private String _city; private String _country; private String _postalCode; //Properties } 并且他们从Employee到Address one-to-many关系(每个雇员在他们的记录中可以有多个地址) 。 方便地忽略了一个事实,即一个以上的员工可能居住在同一地址。 我从内存中的对象(NHibernate实体)的角度理解了这一点。 我正在努力的是映射文件(在这里我举一个简单的例子)。 到目前为止,这是我想出的: // Intentionally left out XML and <hibernate-mapping> // Mappings for class
  • Map Enum as Int with Fluent NHibernate and NHibernate 3
    I used this How do you map an enum as an int value with fluent NHibernate? to map in the past but I've recently upgraded to NHibernate 3 and this doesn't seem to work anymore. I've put breakpoints in my EnumConvention class and they're not being hit. The query that is hitting the database has the enum as a string which is the default configuration. How does this work with NHibernate 3? Update Here is part of the mapping file that is generated: <property name="ComponentType" type="FluentNHibernate.Mapping.GenericEnumMapper`1[[...ComponentType, ..., Version=1.0.0.0, Culture=neutral
  • 多对多,带有额外列nhibernate(many-to-many with extra columns nhibernate)
    问题 所以我有两个表Users和Groups 。 这些表(在数据库中)与UGlink链接表UGlink 。 现在,除了主外键之外,链接表还有一个额外的列: Date 。 据我了解,这意味着我必须有两个“多对一”,链接位于“中间”。 但是,由于我几乎从不对额外的列值感兴趣,因此仍然有必要避免链接吗? 那就是我希望能够写: thisUser.Groups 获取组,而不是: thisUser.UGlinks.Group 回答1 在many-to-many ,无配对表作为一个实体的显式映射-在NHibernate的当然支载。 因此,万一Date列是自动生成的或可为空(不必由app / NHiberante插入) ,我们可以这样做:6.8。 双向关联 <class name="User"> <id name="Id" column="Uid"/> ... <bag name="Groups" table="UGlink" lazy="true"> <key column="Uid"/> <many-to-many class="Group" column="Gid"/> </bag> </class> <class name="Group"> <id name="id" column="Gid"/> ... <!-- inverse end --> <bag name="Users"
  • How to do a fluent nhibernate one to one mapping?
    How do I do this I am trying to make a one to one mapping. public class Setting { public virtual Guid StudentId { get; set; } public virtual DateFilters TaskFilterOption { get; set; } public virtual string TimeZoneId { get; set; } public virtual string TimeZoneName { get; set; } public virtual DateTime EndOfTerm { get; set; } public virtual Student Student { get; set; } } // class map public SettingMap() { /// Id(Reveal.Member<Setting>("StudentId")).GeneratedBy.Foreign("StudentId"); //Id(x => x.StudentId); Map(x => x.TaskFilterOption).Default(DateFilters.All.ToString()).NvarcharWithMaxSize()