我正在使用Orchard IRepository来管理数据并将其保存到db ...这就是我想要做的。

我的课是:

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”

现在,当我调用存储库创建时,将执行以下插入:
(以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,并(错误地)认为Tables具有自动编号键。

这是错误:

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)

编辑:
我已经研究了一些代码,我认为:


不正确的身份是由于流利的NHibernate:自动映射约定
果园使用IAutoMappingAlteration覆盖了错误的假设


所以我可以在以下方面更改我的问题:

如何为类定义自定义IAutoMappingAlteration,以向Orchard解释我的ID不是身份?

或(换句话说)

如自动映射文档中所述,在哪里可以在果园中找到“自动映射配置”?

https://github.com/jagregory/fluent-nhibernate/wiki/Auto-mapping

(...“您可以通过覆盖自动映射配置中的IsId方法来修改自动映射器发现身份的方式。”

最佳答案

Orchard中的存储库实现可供更高级别的内容管理API使用。它不是被设计或用作通用存储库实现或ORM的替代品(为此,我们拥有nHibernate)。您应该直接使用nHibernate。 OrchardPo模块中的低级示例:https://bitbucket.org/bleroy/orchardpo/src

关于sql-server - 如何在 Orchard 中使用带有int键(NOT IDENTITY)的IRepository,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14580845/

10-17 00:46