如何从Entity Framework 4.0中继承其他实体的实体获取数据

时间:2010-10-19 07:31:14

标签: c# asp.net entity-framework-4

EF的新手 - 请耐心等待。

由于数据库的设计方式,在我的模型中我有一个User实体。 Contact实体继承自用户实体,Profile实体继承自Contact实体。

如何获取个人资料列表,以及如何创建个人资料?

我能够获得用户列表没问题。

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

对于实体框架4每表类型继承,您需要两件事:

  1. “父”表和“子”表。 “子”表应该有一个FK到“父”表的PK。
  2. 您需要在EDM中设置继承关联。如果操作正确,您应该看到实体之间的箭头关联,并且子表的名称中应该有文本说明它的父级。
  3. 现在,您可以通过这种方式获得“用户”:(我假设您已经这样做了)

    var allUsers = ctx.Users;
    

    现在获取“联系人”很特别 - 因为它属于“用户”实体集(您可以通过查看“联系人”实体的属性来证明这一点。)

    这是联系人的方式:

    var allContacts = ctx.Users.OfType<Contact>();
    

    这是如何工作的? OfType 是IEnumerable扩展方法,它根据给定的类型过滤所有元素。所以它基本上是一个foreach循环:

    foreach (var item in source)
    {
       if (item is Contact) result.Add(item);
    }
    

    同样地,这就是你获得个人档案的方式:

    var allProfiles = ctx.Users.OfType<Profile>();
    

    要再次添加新配置文件 - 将其添加到“用户”实体集:

    var newProfile = new Profile { Name = "Foo" };
    ctx.Users.AddObject(newProfile);
    

    另外,我希望这些表与ASP.NET Membership模式无关。如果是,请立即停止。您不应通过EF映射这些表格。通过常规Membership API访问该功能。

    HTH。