我有一个错误异常:“无法插入select SCOPE_IDENTITY()”。经过几个小时的谷歌搜索后,我发现我的映射文件中有错误。我尝试了所有可能的解决方案,但错误不断出现。
我的映射文件:
public sealed class EmployeeMap : ClassMap<Employee>
{
public EmployeeMap()
{
Table("dbo.Employee");
Id(x => x.Id).Column("EmployeeId");
Map(x => x.Name);
Map(x => x.Job);
HasMany(x => x.Phones).KeyColumn("EmployeeId").Table("dbo.Phone")
.Inverse()
.Cascade.All();
}
}
public sealed class PhoneMap : ClassMap<Phone>
{
public PhoneMap()
{
Table("dbo.Phone");
Id(x => x.Id).Column("PhoneId");
Map(x => x.PhoneNumber);
Map(x => x.PhoneType);
Map(x => x.EmployeeId);
References(x => x.Employee).Column("EmployeeId").Not.Nullable();
}
}
Session.SaveOrUpdate()中出现问题 我哪里错了?
答案 0 :(得分:4)
似乎没有人回答我的问题......
没必要。我自己找到了答案:
public sealed class EmployeeMap : ClassMap<Employee>
{
public EmployeeMap()
{
Table("dbo.Employee");
Id(x => x.Id).Column("EmployeeId");
Map(x => x.Name);
Map(x => x.Job);
HasMany(x => x.Phones).KeyColumn("EmployeeId").Table("dbo.Phone").Inverse().Cascade.AllDeleteOrphan();
}
}
public sealed class PhoneMap : ClassMap<Phone>
{
public PhoneMap()
{
Table("dbo.Phone");
Id(x => x.Id).Column("PhoneId");
Map(x => x.PhoneNumber);
Map(x => x.PhoneType);
Map(x => x.EmployeeId);
References(x => x.Employee, "EmployeeId");
}
}
答案 1 :(得分:0)
我的经验告诉我,通常在发生选择SCOPE_IDENTITY()
错误时是由于映射不正确。
确保所有Mapped字段都与数据库中的字段匹配。如果它们是否可以为空,如果你有所有这些的映射,等等。
然后,当您指出引用的多对一关系映射为:
References<TableRelated>(x => x.PropertyRelated, "fieldId");
所以它应该是References<Employee>(x => x.Employee, "EmployeeId");
但这可能是另一个问题(不确定它是否会产生相同的scope_identity错误)
答案 2 :(得分:0)
我有同样的错误。也许它对社区有用。
我找到了发生异常的根: 检查你的&#34; Id&#34;表中的列。 &#39; Id&#39;列应该递增。在创建表格时,有必要将IDENTITY设置为唯一字段:
CREATE TABLE dbo.aTable (ID_User INTEGER NOT NULL PRIMARY KEY IDENTITY(1,1), Name VARCHAR(30)) END
答案 3 :(得分:0)
我有同样的问题。事实证明,我保存的内容超过了我桌子上指定字段所允许的字符数。它被声明为:
(varchar(30), null)
我保存了31个字符,并且发生了相同的消息错误。我只是调整了我的角色长度,一切都恢复了正常。