【发布时间】:2015-04-30 23:25:09
【问题描述】:
我有一个使用 ASP.NET Identity 2.2 的实体框架应用程序(即,我的上下文继承自 IdentityDbContext<T>,我有一个继承自 IdentityUser 的 User 类)。我在种子方法中使用以下调用成功地为AspNetUsers 表播种:
var testUser = new User() {
UserName = "TestUser",
Email = "TestUser@Domain.tld"
};
manager.Create(testUser, "TestPassword");
我已扩展模型以包含一个 Post 类,其中包含对我的 User 类的引用:
public class Post {
public Post() {}
[Required]
public int Id { get; set; }
[Required]
public User User { get; set; }
}
当然,这对应于我的User 类中的以下内容:
public class User : IdentityUser {
public User() : base() {
this.Posts = new HashSet<Post>();
}
public ICollection<Post> Posts { get; set; }
//Additional members...
}
然后我将使用以下内容播种 Posts 集合:
var testPost = new Post() { Id = 1, User = testUser };
context.Posts.AddOrUpdate(
post => post.Id,
testPost
);
从技术上讲,这很好用; Post 实例被创建,并且自动生成的User_Id 字段正确填充了新创建的User 实例的Id。
那么问题是什么?每次运行时,我都会在EntityValidationErrors 中得到以下信息:“用户字段是必需的”。它不会阻止我的应用程序正常工作,但它会使检测合法错误变得困难。
显然,我可以将自定义代码添加到我的 DbContext.SaveChanges() 方法中以忽略此错误,但我宁愿首先了解它为什么会发生,特别是如果我的数据播种方式存在问题.
【问题讨论】:
-
如果您首先插入用户,调用 SaveChanges(),然后使用另一个 SaveChanges() 插入帖子,是否还会出现此错误?
-
@JeroenVannevel - 这不起作用,但我确实找到了解决方案(并且即将发布答案)。
标签: c# asp.net entity-framework entity-framework-6 asp.net-identity-2