所以我仍然坚持我一直在研究的审计表。
这些是我的模特:
public interface Audit {
int AuditById {get;set;}
DateTime AuditOn {get;set;}
User AuditBy {get;set;}
}
User {
Id {get;set;}
Email {get;set;}
Password {get;set;}
}
Profile : Audit {
public int Id {get;set;}
public string Name {get;set;}
public int AuditById {get;set;}
public DateTime AuditOn {get;set;}
public User AuditBy {get;set;}
public User User {get;set;}
}
这是在我的dbase上下文中,以确保用户具有所需的配置文件,但配置文件没有所需的用户。
Dbase: DbContext{
modelbuilder.Entity<Profile>()
.hasoptional(e => e.User)
.withrequired(u => u.Profile);
}
在我的种子上,这就是我为第一个用户/管理员所做的事情:
var admin = new User{
Id = 1,
Email = 'email@email.com',
Password = 'woop',
Profile = new Profile {
Name = 'admin name',
AuditById = 1,
AuditOne = DateTime.Now
}
}
所以,我收到了这个错误:
“无法确定相关操作的有效排序。 由于fk约束,模型要求或,可能存在依赖关系 存储生成的值“
据我所知,AuditById导致它为1,在Save上仍然不存在。有办法解决这个问题吗?或者有关如何为用户和Profile表建模的建议?即使没有用户,我也需要配置文件存在,如果没有配置文件,用户就不能存在。
感谢您的帮助!
答案 0 :(得分:0)
首先尝试创建配置文件记录,然后在创建用户记录时添加对它的引用。
dbContext.Profiles.Add(new Profile { Id = 1, ... });
var admin = new User{
Id = 1,
Email = 'email@email.com',
Password = 'woop',
ProfileId = 1
}
}
dbContext.Users.Add(admin);
dbContext.SaveChanges();
另外,我假设您在问题中包含的代码是假代码,如果不是,您可能会遗漏一些重要的内容(例如navigation properties),或许以下内容会有所帮助:
class User
{
[Key]
protected int Id { get; set; }
[ForeignKey("Profile")]
protected int ProfileId { get; set; }
protected Profile Profile { get; set; }
...
}
class Profile
{
[Key]
protected int Id { get; set; }
[ForeignKey("User")]
protected int? UserId { get; set; }
protected User User { get; set; }
...
}