0
我想跟蹤誰創建了實體,以及誰編輯(最後)實體。因爲我想爲我的項目中的每個實體執行此操作,所以我在名爲EntityBase的基類中執行此操作。實體框架核心:如何在一個引用同一個表的實體中使用兩個一對多關係來配置模型
如果I與對應ForeignKey的屬性取消對EditorUser在EntityBase類中,Context.Database.EnsureCreated方法拋出以下異常:
InvalidOperationException異常: 附加信息:子/從屬側無法確定對於'User.CreatorUser'和'User'之間檢測到的一對一關係。要確定關係的子/從屬端,請配置外鍵屬性。
任何人都可以幫我配置模型來完成我的要求嗎?
public class EntityBase
{
public Guid Id { get; set; }
public Guid CreatorUserId { get; set; }
[ForeignKey(nameof(CreatorUserId))]
public User CreatorUser { get; set; }
public Guid? EditorUserId { get; set; }
//[ForeignKey(nameof(EditorUserId))]
//public User EditorUser { get; set; }
}
public class User : EntityBase
{
public String Name { get; set; }
}
public class House : EntityBase
{
public String Address { get; set; }
}
class Context : DbContext
{
public Guid CurrentUserId = new Guid("3de85c1f-3ce1-4342-a582-83d6cc8e308f");
public DbSet<User> Users { get; set; }
public DbSet<House> Houses { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite(@"Data Source = c:\Temp\eftest.db;");
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
foreach (var relationship in modelBuilder.Model.GetEntityTypes().SelectMany(e => e.GetForeignKeys()))
{
relationship.DeleteBehavior = DeleteBehavior.Restrict;
}
base.OnModelCreating(modelBuilder);
}
public override int SaveChanges()
{
var changeSet = ChangeTracker.Entries<EntityBase>();
if (changeSet != null)
{
foreach (var entry in changeSet.Where(c => c.State != EntityState.Unchanged))
{
switch (entry.State)
{
case EntityState.Added:
entry.Entity.CreatorUserId = CurrentUserId;
break;
default:
entry.Entity.EditorUserId = CurrentUserId;
break;
}
}
}
return base.SaveChanges();
}
}
就是這樣。謝謝你的答案。 –