Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从实体框架4.0中继承其他实体的实体中获取数据_C#_Asp.net_Entity Framework 4 - Fatal编程技术网

C# 如何从实体框架4.0中继承其他实体的实体中获取数据

C# 如何从实体框架4.0中继承其他实体的实体中获取数据,c#,asp.net,entity-framework-4,C#,Asp.net,Entity Framework 4,EF的新人-请容忍我 由于数据库的设计方式,在我的模型中,我有一个用户实体。联系人实体继承自用户实体,配置文件实体继承自联系人实体 如何获取配置文件列表,以及如何创建配置文件 我可以得到一个用户列表没有问题 非常感谢你的帮助 对于每个类型继承的实体框架4表,您需要两件事: “父”表和“子”表。“子”表与“父”表的PK之间应该有一个FK 您需要在EDM中设置继承关联。如果操作正确,您应该会看到实体之间的箭头关联,并且子表的名称中应该有说明其父表的文本 现在,您可以通过以下方式获得“用户”:(我假设

EF的新人-请容忍我

由于数据库的设计方式,在我的模型中,我有一个用户实体。联系人实体继承自用户实体,配置文件实体继承自联系人实体

如何获取配置文件列表,以及如何创建配置文件

我可以得到一个用户列表没有问题


非常感谢你的帮助

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

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

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

    这是您获取联系人的方式:

    var allContacts = ctx.Users.OfType<Contact>();
    
    同样,这是您获取个人资料的方式:

    var allProfiles = ctx.Users.OfType<Profile>();
    
    另一方面,我希望这些表与ASP.NET成员模式无关。如果是的话,现在就停下来。不应通过EF映射这些表。通过常规成员资格API访问该功能


    HTH.

    我也想知道(也是EF的新手)。对于LINQ to SQL(通过WCF for Silverlight 3),我从未使用过生成的对象,因为我总是希望得到比框架提供的更“高级”的东西(例如添加或删除字段)。因此,每个DB对象都有一个自定义对象。这听起来像是更多的工作,但从长远来看,这并不是什么令人头痛的事。@Peet Brits-看我的答案。我最近也做过同样的事情。很容易做到。如果我尝试这样做:var allContacts=ctx.Users.OfType,我在allContacts上遇到这个错误:无法将方法组分配给隐式类型的局部变量my bad-您需要在末尾使用()
    ctx.Users.OfType()
    。这将是一个IQueryable,如果您想要一个列表,请执行以下操作:
    ctx.Users.OfType().ToList()
    
    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);