在EF 4中,列的子集可以由.NET中的类表示

时间:2012-10-22 22:20:09

标签: c# .net entity-framework entity-framework-4.1

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

有没有办法生成EDMX,以便在我的项目中,Height,Weight和Age是一个名为Characteristics的公共非实体类的属性,在代码中,我可以将它们称为

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

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

在代码中,您可以使用AddCharacteristic(男孩男孩,特征特征)方法在Boy(或Girl)类中设置这些属性。

答案 1 :(得分:1)

您也可以在允许标准EF CRUD操作的同时使用基本类型可能如下的Table-per-type inheritance来完成:

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

with Inheritence Tables类型:

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

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

(共3桌)

允许您非常有效地在EF中进行标准操作。我还强烈建议阅读Type per Table继承的性能,虽然这样的简单表结构不应该妨碍你。