我首先遇到EF代码问题
当我尝试将新记录插入表格时,我收到消息。
Cannot insert explicit value for identity column in table '' when IDENTITY_INSERT is set to OFF.
知道我收到错误的原因吗?
我正在使用以下代码:
public void SaveNewResponse()
{
using (var context = new Context())
{
var newResponse = new Response()
{
lngRequestLineID = 1001233,
memXMLResponse = "test Response",
fAdhoc = false,
};
context.tblResponses.Add(newResponse);
context.SaveChanges();
}
}
这是我的映射
public class tblResponsMap : EntityTypeConfiguration<tblRespons>
{
public tblResponsMap()
{
// Primary Key
this.HasKey(t => new { t.lngResponseLineID});
// Properties
this.Property(t => t.lngResponseLineID)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
this.Property(t => t.lngRequestLineID);
// Table & Column Mappings
this.ToTable("tblResponses");
this.Property(t => t.lngResponseLineID).HasColumnName("lngResponseLineID");
this.Property(t => t.lngRequestLineID).HasColumnName("lngRequestLineID");
this.Property(t => t.fAdhoc).HasColumnName("fAdhoc");
this.Property(t => t.memXMLResponse).HasColumnName("memXMLResponse");
}
}
答案 0 :(得分:2)
确定, 我找到了。 数据库已正确设置,但我的映射不正确。
public class tblResponsMap : EntityTypeConfiguration<tblRespons>
{
public tblResponsMap()
{
// Primary Key
this.HasKey(t => new { t.lngResponseLineID});
// Properties
this.Property(t => t.lngResponseLineID)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); <-- here
this.Property(t => t.lngRequestLineID);
// Table & Column Mappings
this.ToTable("tblResponses");
this.Property(t => t.lngResponseLineID).HasColumnName("lngResponseLineID");
this.Property(t => t.lngRequestLineID).HasColumnName("lngRequestLineID");
this.Property(t => t.fAdhoc).HasColumnName("fAdhoc");
this.Property(t => t.memXMLResponse).HasColumnName("memXMLResponse");
}
}
答案 1 :(得分:0)
您无需更改映射代码,而应更改此行:
lngRequestLineID = 1001233
对此:
lngRequestLineID = 0
在我的过期中,用[KeyAttribute]装饰de Id实体的属性就足够了。
答案 2 :(得分:0)
我在向 EF 核心实体模型添加关系时遇到此错误,方法是将其指向在当前上下文之外提取且不再被跟踪的实体模型。我这样做是为了避免额外的读取操作,这让我最初觉得很尴尬。
public static void AddMatches(List<Match> matches, Profile p)
{
using (var db = new DbContext())
{
foreach (var match in matches)
{
match.Profile = p;
db.Match.Add(match);
}
db.SaveChanges();
}
}
我通过另一个读取操作解决了这个问题。在查阅了 Microsoft 文档 Here 后,我确信这相对正常,尤其是在 MVC 世界中。修复:
public static void AddMatches(List<Match> matches, Profile p)
{
using (var db = new DbContext())
{
var profile = db.Profile.Find(p.ProfileId);
foreach (var match in matches)
{
match.Profile = profile;
db.Match.Add(match);
}
db.SaveChanges();
}
}