Sql server 如何在Orchard中使用带int键(非标识)的IRepository
我正在使用Orchard IRepository管理数据并保存到数据库。。。这就是我想做的 我的班级是:Sql server 如何在Orchard中使用带int键(非标识)的IRepository,sql-server,asp.net-mvc,insert,orchardcms,irepository,Sql Server,Asp.net Mvc,Insert,Orchardcms,Irepository,我正在使用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("S
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,并(错误地)假定表具有自动编号键
这就是错误:
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使用IAutomappingAlternation覆盖不正确的假设
(…“您可以通过覆盖自动映射配置中的IsId方法来修改自动映射发现身份的方式。”…)Orchard中的存储库实现供更高级别的内容管理API使用。它不是设计或打算作为一个通用的存储库实现或ORM的替代品(我们有nHibernate来做这件事)。你应该直接使用nHibernate。OrchardPo模块中的低级示例:我不太清楚。我是否应该使用IRepository在几个表上执行简单的crud操作,仅仅因为存储库在没有标识的地方采用了标识?如果它与所做的约定和假设兼容,为什么不兼容,但这里的情况似乎不是这样。
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.