我使用Orchard IRepository来管理数据并保存到数据库......这就是我想要做的事情。
我的课程是:
public class SocietaRecord
{
public virtual int Id { get; set; }
public virtual string Club { get; set; }
public virtual string Email { get; set; }
}
我的移民:
SchemaBuilder.CreateTable("SocietaRecord", table => table
.Column<int>("Id", column => column.PrimaryKey())
.Column<String>("Club", c => c.Nullable())
.Column<String>("Email", c => c.Nullable())
);
请注意,Id不是IDENTITY
现在,当我调用Repository Create时,执行以下插入: (抓住sql profiler)
exec sp_executesql N'INSERT INTO Match_SocietaRecord
(Club, Email) VALUES (@p0, @p1);
select SCOPE_IDENTITY()',N'@p0 nvarchar(4000),@p1 nvarchar(4000),
@p0=N'Test',@p1=NULL
失败,因为它忽略了我的Id并假设(错误地)表具有自动编号密钥。
这是错误:
NHibernate.Exceptions.GenericADOException: could not insert:
[Match.Models.SocietaRecord]
[SQL: INSERT INTO Match_SocietaRecord (Club, Email) VALUES (?, ?);
select SCOPE_IDENTITY()] ---> System.Data.SqlClient.SqlException:
Cannot insert the value NULL into column 'Id', table ORCHARD.dbo.Match_SocietaRecord';
column does not allow nulls. INSERT fails.
如果没有这样我可以插入自己的id,如何解释到存储库查看表并且不假设身份? (是的,我在创建之前在对象记录上提供了有效的ID)
编辑: 我已经挖了一些代码,我认为:
不正确的身份归因于Fluent NHibernate:自动映射约定
Orchard使用IAutoMappingAlteration覆盖不正确的假设
所以我可以改变我的问题:
如何为我的类定义自定义IAutoMappingAlteration以向Orchard解释我的Id不是身份?
或(换句话说)
我可以找到&#34;自动配置&#34;在自动映射文档中描述的果园中?
https://github.com/jagregory/fluent-nhibernate/wiki/Auto-mapping
(...&#34;您可以通过覆盖自动配置中的IsId方法来修改自动播放器发现身份的方式。&#34; ...)
答案 0 :(得分:0)
Orchard中的存储库实现可供更高级别的内容管理API使用。它不是设计或打算作为通用存储库实现或ORM的替代品(我们有nHibernate为此)。你应该直接使用nHibernate。 OrchardPo模块中的低级示例:https://bitbucket.org/bleroy/orchardpo/src