0

假设我在 SQL Server (2008) 中设置了以下表格

有没有办法生成 EDMX,以便在我的项目中高度、重量和年龄是一个名为的公共非实体类的属性,Characteristics并且在代码中,我可以将它们处理为

ABoy.Characteristics.Height
ABoy.Characteristics.Weight
ABoy.Characteristics.Age

AGirl.Characteristics.Height
AGirl.Characteristics.Weight
AGirl.Characteristics.Age

我想这样做,因为在我的实际情况下,我的 Characteristic 类还有其他方法。我不想要一个公用表,因为特性不一定需要由 EF 跟踪,除非它们被添加到 BOY 或 GIRL 类。

编辑:写下来让我意识到我可以只拥有一个为 BOY 和 GIRL 公开的 Characteristic 类型的部分类,它只会返回一个 Characteristic 类型的对象。我还会有一个跟踪器来始终为每个 BOY 或 GIRL 实例返回相同的对象,并在有修改时对其进行更新。我将把它留给其他建议。

4

2 回答 2

1

您可以使用数据库视图来完成此操作。实体框架将允许您将视图作为实体导入。请记住,视图不支持 CRUD 操作。

此外,您将需要包含一个主键或某种 EF 唯一标识行的方式。否则,您将获得许多具有相同数据的行。

在代码中,您可以使用 AddCharacteristic(Boy boy, Characteristic characteristic) 方法在 Boy(或 Girl)类上设置这些属性。

于 2012-10-22T22:25:05.773 回答
1

您还可以在允许标准 EF CRUD 操作的同时通过使用Table-per-type 继承来完成,其中您的基本类型可能如下所示:

Person
{
  public <guid/int> ID { get; set; }
  public <type> Height { get; set; }
  public <type> Weight { get; set; }
  public <type> Age { get; set; }
}

具有继承表类型:

Boy
{
  public <guid/int> ID { get; set; }
}

Girl
{
  public <guid/int> ID { get; set; }
}

(共 3 张桌子)

让您在 EF 中非常有效地进行标准操作。我还强烈建议阅读每表继承类型的性能,尽管像这样的简单表结构不应该妨碍你。

于 2012-10-22T22:40:18.480 回答