1

我的几乎所有实体都有一些通用属性(CreatedBy、CreatedOn、UpdatedBy、UpdateOn)。我决定拥有一个具有这些属性的 BaseEntity,然后让我的所有其他实体都继承自该实体。

例如:

BaseEntity --> 问题

BaseEntity --> 回答

现在如何从我的模型容器中加载问题?

没有db.Questions或不再db.Answers有。只是db.BaseEntities

具体来说,我想按他们的主题加载所有问题 - 所以通常我会说db.Questions.Where(q => q.Subject.Id.Equals(subjectId))

我现在该怎么做?

非常感谢,皮特

4

2 回答 2

1

不要为此使用基类。

您最终会得到一个实体集,并且必须使用 typeof(X)。

最糟糕的是,这可能会破坏其他实体的未来继承,特别是如果有些是每个类型的表,有些是每个层次结构的表,有些是两者的混合。

相反,使用部分类来定义具有方面属性(CreatedBy、CreatedOn、UpdatedBy、UpdatedOn)的公共接口。

编辑:基础实体还需要一个表,其中包含所有实体的 PK。这将导致表过大,并可能导致查询和插入期间的性能下降。

于 2012-06-10T12:25:39.880 回答
1

首先,您可以使用多种类型的继承映射策略来配置数据库

您还可以将具体类型集添加到 DbContext

public class MyDbContext : DbContext
{
     public DbSet<Question> Questions { get; set; }
     public DbSet<Answer> Answers { get; set; }
}

最重要的是 - 我更喜欢组合而不是继承。这感觉更自然

public class HistoryRecord
{
    public User CreatedBy { get; set; }
    public User UpdatedBy { get; set; }
    public DateTime CreatedOn { get; set; }
    public DateTime UpdatedOn { get; set; }
}

并将其用作问题、答案等中的复杂类型

public class Question
{
     public HistoryRecord HistoryRecord { get; set; }
}
于 2012-06-10T12:25:53.307 回答