sql-server - 如何在 Orchard 中使用带有 int key (NOT IDENTITY) 的 IRepository

标签 sql-server asp.net-mvc insert orchardcms irepository

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

我的类(class)是:

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 并(错误地)假设 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)

编辑: 我在代码中挖掘了一些,我认为:

  • 身份不正确是由于 Fluent NHibernate:自动映射约定

  • Orchard 使用 IAutoMappingAlteration 覆盖不正确的假设

所以我可以更改我的问题:

我如何为我的类定义一个自定义的 IAutoMappingAlteration 来向 Orchard 解释我的 Id 不是一个身份?

或者(换句话说)

我在哪里可以找到自动映射文档中描述的 orchard 中的“自动映射配置”?

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 key (NOT IDENTITY) 的 IRepository,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14580845/

相关文章:

sql - 表上的选择性能缓慢

sql-server - 字符长度的 900 字节索引大小限制

asp.net-mvc - 在使用 ASP.Net Identity 的 ASP.Net MVC 注册代码上运行单元测试时出错

C++如何在复制时保留字符串容量

java - 问题插入heapsort

sql-server - 使用WITH将Oracle查询转换为T-SQL查询

sql-server - 合并语句错误调试

c# - ASP.NET MVC - 附加类型为 'MODELNAME' 的实体失败,因为相同类型的另一个实体已经具有相同的主键值

c# - 单个操作有多个输出

无法将用户输入保存到变量中