Nhibernate在插入时添加了重复列
我用的是流利的NHibernate。我有一个名为Audit的类,它具有ItemID属性。每次我想保存该表中的任何内容时,都会出现此错误 错误消息: 在INSERT的SET子句或列列表中多次指定列名“itemid”。一个列不能在同一子句中分配多个值。修改该子句以确保列只更新一次。如果此语句更新或向视图中插入列,则列别名可能会隐藏代码中的重复 课程Nhibernate在插入时添加了重复列,nhibernate,fluent-nhibernate,nhibernate-mapping,fluent-nhibernate-mapping,Nhibernate,Fluent Nhibernate,Nhibernate Mapping,Fluent Nhibernate Mapping,我用的是流利的NHibernate。我有一个名为Audit的类,它具有ItemID属性。每次我想保存该表中的任何内容时,都会出现此错误 错误消息: 在INSERT的SET子句或列列表中多次指定列名“itemid”。一个列不能在同一子句中分配多个值。修改该子句以确保列只更新一次。如果此语句更新或向视图中插入列,则列别名可能会隐藏代码中的重复 课程 public class Audit : EntityBase { /********* ** Accessors ******
public class Audit : EntityBase
{
/*********
** Accessors
*********/
/// <summary>When the action was logged.</summary>
public virtual DateTime Date { get; set; }
/// <summary>The person who triggered the action.</summary>
public virtual BasicUser User { get; set; }
/// <summary>The name of the related group, used for filtering (e.g. idea, system-settings, site-editor)</summary>
public virtual string ItemGroup { get; set; }
/// <summary>The ID of the related entity.</summary>
public virtual int ItemID { get; set; }
/// <summary>The title of the related entity.</summary>
public virtual LocalizableString ItemTitle { get; set; }
/*********
** Public methods
*********/
/// <summary>Construct an instance.</summary>
public Audit() { }
}
公共类审核:EntityBase
{
/*********
**访问者
*********/
///当操作被记录时。
公共虚拟日期时间日期{get;set;}
///触发动作的人。
公共虚拟基本用户{get;set;}
///用于筛选的相关组的名称(例如idea、系统设置、站点编辑器)
公共虚拟字符串项组{get;set;}
///相关实体的ID。
公共虚拟int ItemID{get;set;}
///相关实体的名称。
公共虚拟本地化字符串ItemTitle{get;set;}
/*********
**公共方法
*********/
///构造一个实例。
公共审计(){}
}
映射:
public class AuditMapper<T> : IEntityMapper<T>
where T : Audit
{
public virtual void ExtendDomainModel(IEntityMetadata<T> metadata)
{
metadata.MapTablePerClassHierarchy<Audit, T>("`ItemGroup`");
if (!metadata.IsSubclass)
{
metadata.Map.ManyToOne(entity => entity.User, relation => relation.Column("`userid`"));
metadata.Map.Property(c => c.ItemGroup, mapper =>
{
mapper.Insert(false);
mapper.Update(false);
});
metadata.Map.Property(c => c.ItemID, mapper => mapper.Column("itemid"));
}
else
{
metadata.MapSubclass.ManyToOne(entity => entity.User, relation => relation.Column("`userid`"));
metadata.MapSubclass.Property(c => c.ItemGroup, mapper =>
{
mapper.Insert(false);
mapper.Update(false);
});
metadata.MapSubclass.Property(c => c.ItemID, mapper =>
{
mapper.Insert(false);
mapper.Update(false);
});
}
}
}
公共类AuditMapper:IEntityMapper
其中T:审计
{
公共虚拟空间ExtendDomain模型(IEntityMetadata)
{
metadata.MapTablePerClassHierarchy(`ItemGroup`');
如果(!metadata.IsSubclass)
{
metadata.Map.ManyToOne(entity=>entity.User,relation=>relation.Column(`userid`));
属性(c=>c.ItemGroup,mapper=>
{
mapper.Insert(false);
mapper.Update(false);
});
属性(c=>c.ItemID,mapper=>mapper.Column(“ItemID”);
}
其他的
{
metadata.MapSubclass.manytone(entity=>entity.User,relation=>relation.Column('userid`));
属性(c=>c.ItemGroup,mapper=>
{
mapper.Insert(false);
mapper.Update(false);
});
metadata.MapSubclass.Property(c=>c.ItemID,mapper=>
{
mapper.Insert(false);
mapper.Update(false);
});
}
}
}
SQL查询:
public class AuditMapper<T> : IEntityMapper<T>
where T : Audit
{
public virtual void ExtendDomainModel(IEntityMetadata<T> metadata)
{
metadata.MapTablePerClassHierarchy<Audit, T>("`ItemGroup`");
if (!metadata.IsSubclass)
{
metadata.Map.ManyToOne(entity => entity.User, relation => relation.Column("`userid`"));
metadata.Map.Property(c => c.ItemGroup, mapper =>
{
mapper.Insert(false);
mapper.Update(false);
});
metadata.Map.Property(c => c.ItemID, mapper => mapper.Column("itemid"));
}
else
{
metadata.MapSubclass.ManyToOne(entity => entity.User, relation => relation.Column("`userid`"));
metadata.MapSubclass.Property(c => c.ItemGroup, mapper =>
{
mapper.Insert(false);
mapper.Update(false);
});
metadata.MapSubclass.Property(c => c.ItemID, mapper =>
{
mapper.Insert(false);
mapper.Update(false);
});
}
}
}
在[brainbank].[idealink.core.audit]([date]、[userid]、itemid、[itemtitle_key]、[itemtitle_original]、[itemid]、[ItemGroup])中插入值(@p0、@p1、@p2、@p3、@p4、@p5、'IdeaaAudit');选择SCOPE_IDENTITY()我将在映射器中修复此问题 我变了
metadata.Map.Property(c => c.ItemID, mapper => mapper.Column("itemid"));
到