我正在使用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/