我正在使用Entity Framework。类ChatRoom有一个TranscriptDownloadUserInfo类列表。现在当我尝试空时使用.Clear(),它显示我'无法插入值NULL';
ChatRoom.cs
public class ChatRoom
{
[Key]
public int Key { get; set; }
public virtual ICollection<TranscriptDownloadUserInfo> TranscriptDownAllowedUsers { get; set; }
public ChatRoom()
{
TranscriptDownAllowedUsers = new SafeCollection<TranscriptDownloadUserInfo>();
}
}
TranscriptDownloadUserInfo.cs
public class TranscriptDownloadUserInfo
{
[Key]
public int Key { get; set; }
public virtual ChatUser User { get; set; }
public int? UserKey { get; set; }
public bool Allowed { get; set; }
}
TranscriptDownloadUserInfo Mapping
public TranscriptDownloadUserInfoMap()
{
this.HasKey(t => t.Key);
this.ToTable("TranscriptDownAllowedUsers");
this.Property(t => t.Key).HasColumnName("Key");
this.Property(t => t.UserKey).HasColumnName("UserKey");
this.Property(t => t.Allowed).HasColumnName("Allowed");
this.HasRequired(t => t.User)
.WithMany()
.HasForeignKey(t => t.UserKey);
}
添加迁移代码
public override void Up()
{
CreateTable(
"dbo.TranscriptDownAllowedUsers",
c => new
{
Key = c.Int(nullable: false, identity: true),
UserKey = c.Int(nullable: false),
Allowed = c.Boolean(nullable: false, defaultValue: false),
ChatRoom_Key = c.Int(nullable: false),
})
.PrimaryKey(t => t.Key)
.ForeignKey("dbo.ChatUsers", t => t.UserKey, cascadeDelete: true)
.ForeignKey("dbo.ChatRooms", t => t.ChatRoom_Key)
.Index(t => t.UserKey)
.Index(t => t.ChatRoom_Key);
}
生成错误的代码
room.TranscriptDownAllowedUsers.Clear();
_repository.CommitChanges();
内异常
无法将值NULL插入列&#39; ChatRoom_Key&#39;,表中 &#39; Dabb.dbo.TranscriptDownAllowedUsers&#39 ;;列不允许空值。 UPDATE失败。\ r \ n语句已终止。
我不确定为什么会出现此错误。任何建议都将受到高度赞赏。
答案 0 :(得分:1)
我认为存在矛盾nullable: false, identity: true
,因为您将密钥列定义为标识,因此EF 假设可以插入 null
值以生成新密钥。
在这种情况下,你应该让它可以为空。
也就是说,must使您的外键ChatRoom_Key
可以为空,因为Clear
必须删除引用。
答案 1 :(得分:0)
您的字段不可为空。
Key = c.Int(nullable: false, identity: true),
UserKey = c.Int(nullable: false),
Allowed = c.Boolean(nullable: false, defaultValue: false),
ChatRoom_Key = c.Int(nullable: false),
您可以插入默认值或某些内容,但不能插入任何内容。