C# 访问多个表';仅通过一个表(C&x2B;SQL Server)保存数据

C# 访问多个表';仅通过一个表(C&x2B;SQL Server)保存数据,c#,sql-server,relationship,foreign-key-relationship,natural-join,C#,Sql Server,Relationship,Foreign Key Relationship,Natural Join,几个月前,我尝试使用Sql Server+C#开发一个应用程序。该程序是一种“神奇宝贝议程”,用户可以在其中添加和编辑神奇宝贝及其功能、类型和照片,以及搜索记录等其他功能。以下是表格和表格图表中的打印屏幕: 这是我的问题:我试图通过仅使用表“Kanto”中的ID(AbilityID和TypeID)直接访问表“Abilities”和“Types”中的名称。换句话说,我试图使用一个表访问不同表中的许多数据,基本上就是一个表但是,我不确定这是否确实可行。 我认为有两种可能性: 使用数据集关系(尽管

几个月前,我尝试使用Sql Server+C#开发一个应用程序。该程序是一种“神奇宝贝议程”,用户可以在其中添加和编辑神奇宝贝及其功能、类型和照片,以及搜索记录等其他功能。以下是表格和表格图表中的打印屏幕:

这是我的问题:我试图通过仅使用表“Kanto”中的ID(AbilityID和TypeID)直接访问表“Abilities”和“Types”中的名称。换句话说,我试图使用一个表访问不同表中的许多数据,基本上就是一个表但是,我不确定这是否确实可行。 我认为有两种可能性:

  • 使用数据集关系(尽管此解决方案对我来说还不太清楚),例如:

    添加(“神奇宝贝能力”、ds.表格[“能力”]、列[“能力”]、ds.表格[“关东”]、列[“能力”])

  • 使用自然联接,这样我就可以创建更多的表,并使用它们来操作所需的数据

  • 注意:表格“类型”和“能力”应该已经填写了所有必要的信息,因此在表格执行期间不会对其进行编辑


    我不会粘贴整个代码,因为它有点长,但是,如果您想查看其中的特定部分,请让我提供它。

    看看如何使用SQL Server视图。

    这应该会创建一个整合视图。我还没有测试SQL,所以可能有输入错误。这应该让你开始。您需要了解视图和连接

    Create View Pokedata as
        Select name_,  t1.type as Type1, t2.type as Type2, ability
        From Kanto 
        inner Join Abilities on Kanto.abilityId = Abilities.abilityId
        inner join KantoType as kt1 on Kanto.pokémonid = kt1.pokémonid and kanto.typeid1 = kt1.typeid
        inner join on types as t1 on kt1.typeid = t1.typeid
        inner join KantoType as kt2 on Kanto.pokémonid = kt2.pokémonid and kanto.typeid2 = kt2.typeid
        inner join on types as t2 on kt2.typeid = t2.typeid
    

    这并不能真正回答您的问题,因为它太模糊了,无法给出任何具体的建议,但我建议您看看ADO.NET实体框架。使用实体框架,您可以拥有包含来自其他表的对象的类。例如(我在这里猜测您的数据结构…)

    我建议您看看Microsoft与Visual Studio 2012一起发布的一些流媒体视频,例如,这一个:

    这里有一大堆资源:

    public class Pokemon
    {
    int Id {get; set;}
    ICollection<PokeAbility> Abilities {get; set;}
    ICollection<PokeType> Types {get; set;}
    }
    
      public PokeContext : DbContext
        {
        DbSet<Pokemon> Kanto {get;set;}
        DbSet<PokeAbility> Abilies {get; set;}
        DbSet<PokeType> Types {get; set;}
        }
    
    var context = new PokeContext();
    Pokemon instance = context.Kanto.First(); // Fetch first item from the Kanto table in the database
    foreach (var ability in instance.Abilities)
      {
      Console.WriteLine(ability);  // Or whatever you want to do with it.
      }