我有一堆带有标准CreatedByUser / LastModifiedByUser信息的表,包括User表本身。
但是,我似乎无法为其添加EF6种子数据,因为我总是收到以下错误:
System.Data.Entity.Infrastructure.DbUpdateException:无法确定相关操作的有效排序。由于外键约束,模型要求或存储生成的值,可能存在依赖关系。 ---> System.Data.Entity.Core.UpdateException:无法确定相关操作的有效排序。由于外键约束,模型要求或存储生成的值
,可能存在依赖关系
User类看起来像这样(剥离了很多):
Public Class User
Public Sub New()
UsersCreated = New HashSet(Of User)
UsersModified = New HashSet(Of User)
End Sub
<Key>
Public Property Id As Integer
<ForeignKey("CreatedByUserId")>
Public Property CreatedByUser As AspNetUser
Public Property CreatedByUserId As Integer?
Public Property CreatedDate As Date?
<ForeignKey("LastModifiedByUserId")>
Public Property LastModifiedByUser As AspNetUser
Public Property LastModifiedByUserId As Integer?
Public Property LastModifiedDate As Date?
Public Overridable Property UsersCreated As ICollection(Of AspNetUser)
Public Overridable Property UsersModified As ICollection(Of AspNetUser)
End Class
我的DbContext.OnModelCreating中还有以下两条规则:
modelBuilder.Entity(Of AspNetUser)() _
.HasOptional(Function(e) e.CreatedByUser) _
.WithMany(Function(e) e.UsersCreated) _
.HasForeignKey(Function(e) e.CreatedByUserId) _
.WillCascadeOnDelete(False)
modelBuilder.Entity(Of AspNetUser)() _
.HasOptional(Function(e) e.LastModifiedByUser) _
.WithMany(Function(e) e.UsersModified) _
.HasForeignKey(Function(e) e.LastModifiedByUserId) _
.WillCascadeOnDelete(False)
我知道这一点并且User类上的DataAnnotations可能是多余的,但是我已经尝试了一个,然后另一个尝试了两个,并且没有一个工作。
我可以创建数据库,但是当我尝试创建一个新用户时,CreatedByUser和LastModifiedByUser都设置为“Nothing”,它会因上述错误而失败。
以下是种子方法片段:
Dim newUser = New User() With
{
.CreatedByUser = Nothing,
.LastModifiedByUser = Nothing
}
context.Users.Add(newUser)
context.SaveChanges()
我在这里遗漏了什么吗?当我在可空字段中将这些用户设置为Nothing时,我不知道它为什么会失败。我能理解我是否试图引用一个尚未创建的对象,但我不是。