我有以下设置,为简洁起见进行了删节:
public abstract class AuditableEntity
{
public int Id { get; set; }
public Login Login { get; set; } // Login that create this identity.
}
public class Login: AuditableEntity
{
public Security Security { get; set; }
public Guid SessionGuid { get; set; }
}
public class Security: AuditableEntity
{
public string UserName { get; set; }
public string PasswordHash { get; set; }
}
现在只是实体本身Login
不需要。Login
实际上它不属于该表,因此我忽略了它:
modelBuilder.Entity<Login>().Ignore(l => l.Login);
我希望它在所有其他表上都需要,但是当我尝试使其需要时User
:
modelBuilder.Entity<Security.Security>().Property(p => p.Login).IsRequired();
我收到一个编译错误,“'Login' 类型必须是不可为空的值类型才能将其用作参数 'T'”。我注意到我可以在Ignore
之前的调用中将它用作参数“T”,所以我假设这是其他一些隐藏的 T。
我立即显而易见的解决方案不是很优雅:
Login
对in使用 FK 值而不是参考属性AuditableEntity
。- 创建一个没有 的新基类
Login
,另一个派生自添加的基类Login
,然后从最高基类继承我的 Login 类,并从其直接后代继承所有其他类。
有没有更好的方法来做到这一点?