【问题标题】:Stange column name appearing in nHibernate generated SQLStange 列名出现在 nHibernate 生成的 SQL 中
【发布时间】:2011-01-20 00:24:01
【问题描述】:

由于某种原因,以下映射似乎为我创建了一个我在任何地方都找不到的非常奇怪的列名。尝试加载定义为 IList<Event> 的事件集合时发生错误

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="JeanieMaster.Domain.Entities" assembly="JeanieMaster.Domain">
  <class name="Location" table="Location" select-before-update="false" optimistic-lock="none">
    <id name="Id" column="LocationId" type="Int32">
      <generator class="identity"/>
    </id>
    <property name="CompanyName" type="String" />
    <property name="AddressLine1"  type="String" length="220" />
    <property name="AddressLine2"  type="String" length="220" />
    <property name="City" type="String" length="220" />
    <property name="Postcode" type="String" length="15" />
    <property name="County" type="String" length="220" />
    <property name="TelephoneNumber" type="String" length="25" />
    <property name="Latitude" type="Double" />
    <property name="Longitude" type="Double" />
    <property name="CreatedOn" type="DateTime" />
    <property name="ModifiedOn" type="DateTime" />

    <bag name="Events" table="VolatileEventContent" where="DeactivatedOn IS NULL" order-by="StartDate DESC" lazy="false" cascade="none">
      <key column="LocationId"/>
      <many-to-many class="Event"></many-to-many>
    </bag>
  </class>
</hibernate-mapping>

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="JeanieMaster.Domain.Entities" assembly="JeanieMaster.Domain">
  <class name="Event" table="VolatileEventContent" select-before-update="false" optimistic-lock="none">
    <id name="Id" column="VolatileContentEventId" type="Int32">
      <generator class="identity"/>
    </id>

    <property name="Description" type="String" not-null="true" update="false" insert="false"/>

    <property name="StartDate" type="DateTime" not-null="true" />
    <property name="EndDate" type="DateTime" not-null="true" />

    <property name="CreatedOn" type="DateTime" not-null="true" />
    <property name="ModifiedOn" type="DateTime" />

    <many-to-one name="Location" class="Location" column="LocationId" />

    <bag name="Artists" table="EventArtiste" lazy="false" cascade="none">
      <key column="EventId"/>
      <many-to-many class="Artiste" column="ArtisteId" ></many-to-many>
    </bag>
  </class>
</hibernate-mapping>

生成的 SQL 非常奇怪,因为它自己加入了一个不存在的列“elt

SELECT          events0_.LocationId as LocationId__1_, 
                events0_.elt as elt1_, 
                event1_.VolatileContentEventId as Volatile1_12_0_, 
                event1_.Description as Descript2_12_0_, 
                event1_.StartDate as StartDate12_0_, 
                event1_.EndDate as EndDate12_0_, 
                event1_.CreatedOn as CreatedOn12_0_, 
                event1_.ModifiedOn as ModifiedOn12_0_, 
                event1_.LocationId as LocationId12_0_ 
FROM            VolatileEventContent events0_ 
left outer join VolatileEventContent event1_ 
on              events0_.elt=event1_.VolatileContentEventId 
WHERE           events0_.DeactivatedOn = NULL 
and             events0_.LocationId=184244 
ORDER BY        events0_.StartDate

这是我的表定义:

CREATE TABLE [dbo].[VolatileEventContent](
    [VolatileEventContentId] [int] IDENTITY(1,1) NOT NULL,
    [LocationId] [int] NOT NULL,
    [CategoryId] [int] NULL,
    [ContentProviderId] [int] NOT NULL,
    [Description] [nvarchar](4000) NOT NULL,
    [StartDate] [datetime] NOT NULL,
    [EndDate] [datetime] NOT NULL,
    [CreatedOn] [datetime] NOT NULL,
    [ModifiedOn] [datetime] NULL,
    [DeactivatedOn] [datetime] NULL,
 CONSTRAINT [PK_VolatileEventContent] PRIMARY KEY CLUSTERED 
(
    [VolatileEventContentId] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

ALTER TABLE [dbo].[VolatileEventContent]  WITH CHECK ADD  CONSTRAINT [FK_VolatileEventContent_ContentProvider] FOREIGN KEY([ContentProviderId])
REFERENCES [dbo].[ContentProvider] ([ContentProviderId])
GO

ALTER TABLE [dbo].[VolatileEventContent] CHECK CONSTRAINT [FK_VolatileEventContent_ContentProvider]
GO

【问题讨论】:

    标签: c# sql-server nhibernate hibernate


    【解决方案1】:

    嗯,奇怪,我不知道为什么会这样,但我意识到我的 hbm 文件有 2 个问题

    1) VolatileContentEventId 应该是 Event 的主键声明中的 VolatileEventContentId

    2) 我还在子事件实体的键中添加了 column="VolatileEventContentId"

    【讨论】:

      猜你喜欢
      • 2016-12-27
      • 2011-04-20
      • 1970-01-01
      • 2010-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多