假设我在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实例返回相同的对象,并在进行修改时更新它。 我将保留其他建议。
答案 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继承的性能,虽然这样的简单表结构不应该妨碍你。