【发布时间】:2014-10-30 21:29:46
【问题描述】:
我正在使用 Entity Framework Code-First 来重建以前从 Access 数据库运行的应用程序。要求之一是新的数据模式应该是可审计的,即它应该显示谁创建了记录,谁更新了它以及何时等。
我创建了一个基本实体类,如下所示:
public class Entity
{
public int Id { get; set; }
public int CreatedByUserId { get; set; }
public int? UpdatedByUserId { get; set; }
public virtual User CreatedBy { get; set; }
public virtual User UpdatedBy { get; set; }
}
然后我创建了一个继承自 EntityTypeConfiguration 的类,如下所示
public class BaseEntityTypeConfiguration<T> : EntityTypeConfiguration<T> where T : Entity
{
Property(e => e.Id).HasColumnName(typeof(T).Name + "Id");
HasRequired(e => e.CreatedBy).WithMany().HasForeignKey(e => e.CreatedById);
HasOptional(e => e.UpdatedBy).WithMany().HasForeignKey(e => e.UpdatedById);
}
现在我为从我的实体类继承的其余业务类创建从 BaseEntityTypeConfiguration 继承的配置。
当我尝试让我的 User 类从实体继承时出现问题,如下所示:
public class User : Entity
{
public string Username { get; set; }
// etc
}
我将为没有证据的记录添加一个“幽灵”用户以确定谁创建了记录,但这个幽灵用户基本上是由自己创建的。
当我尝试添加此幽灵用户时,我从 Entity Framework 收到以下错误:
Unable to determine a valid ordering for dependent operations. Dependencies may exist due to foreign key constraints, model requirements or store-generated values.
我的域模型中可能存在可能导致此错误的问题,但我的理论是这取决于该用户尝试在此实例中创建自己。
自引用外键约束有问题吗?
【问题讨论】:
标签: c# sql sql-server entity-framework inheritance