在运行时获取DataRelation中的表

在运行时获取DataRelation中的表,datarelation,Datarelation,我试着用一个例子来解释我需要什么 我有一张以db为单位的患者和医嘱表。通过存储过程,患者可以有多个医嘱。我将获取与该患者相关的患者属性和医嘱,并将其放入数据集中。但患者属性将在一个数据表中,该患者的顺序将在另一个数据表中。在前端,我需要创建一个这种关系的类 类病人 { 患者属性 他所做的命令清单 }假设您正在谈论.NET Framework中的System.Data.DataRelation类 MSDN有大量关于此类属性的信息,包括您需要的属性 等等 也就是说,我建议你详细说明你到底想做什么。

我试着用一个例子来解释我需要什么

我有一张以db为单位的患者和医嘱表。通过存储过程,患者可以有多个医嘱。我将获取与该患者相关的患者属性和医嘱,并将其放入数据集中。但患者属性将在一个数据表中,该患者的顺序将在另一个数据表中。在前端,我需要创建一个这种关系的类

类病人 { 患者属性 他所做的命令清单
}

假设您正在谈论.NET Framework中的System.Data.DataRelation类

MSDN有大量关于此类属性的信息,包括您需要的属性

等等


也就是说,我建议你详细说明你到底想做什么。您的语句“因此我需要创建一个关系,并且必须从dataset创建一个类。如果不可能,是否有其他方法可以这样做?”中不清楚您的用例是什么。这使得你很难回答你想要解决的核心问题。

基于你编辑的问题,我会坐下来问你自己,我真的需要在运行时动态生成这些类吗?这似乎是您问题的重点,但我认为用例相对较小

更可能的情况是,您只想创建反映数据库中内容的实体类。为此,你可以看看像Nhibernate这样的ORM(以及许多其他的),或者你甚至可以自己滚动。甚至强类型数据集也是一种选择

如果您正在做一些更一次性的事情,LINQ to SQL查询可以根据您的数据返回匿名类,包括类型安全性等


总之,我仍然不确定你到底想做什么,或者为什么?问题是“如何将数据从数据库获取到实体类中”,还是“如何在两个类之间创建“has-a”关系”,还是

那么前者呢。首先,我将重新迭代类之间存在关系,表之间也存在关系。您的类没有必要知道表中的关系,只需要知道它们之间的关系

也就是说,像Nhibernate这样的ORM将帮助您维护表之间的关系

在将数据从数据库中取出并放入实体方面,下面是一个简单的方法。我不会说这是理想的,甚至不是好的,但核心思想是有效的。我建议您先熟悉基本操作,然后多阅读(并提出更多问题)以找到适合您的应用程序的好方法

using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;

namespace Sample
{
    public class Patient
    {
        public int PatientId { get; set; }
        public string Name { get; set; }

        private IEnumerable<Order> _orders;
        public List<Order> Orders { get { return new List<Order>(_orders); } }

        public static Patient GetById(int patientId)
        {
            using (var cn = new SqlConnection("your Patient connection string"))
            {
                cn.Open();
                using (SqlCommand cm = cn.CreateCommand())
                {
                    cm.CommandType = CommandType.Text;
                    cm.CommandText = "SELECT PatientId, Name FROM Patient WHERE PatientId = @PatientId";
                    cm.Parameters.AddWithValue("@PatientId", patientId);

                    using (SqlDataReader dr = cm.ExecuteReader())
                    {
                        if (!dr.Read())
                            return null;

                        return new Patient
                                        {
                                            PatientId = dr.GetInt32(0),
                                            Name = dr.GetString(1),
                                            _orders = Order.GetAllForPatient(patientId)
                                        };
                    }
                }
            }
        }

        public bool Save()
        {
            // save Patient to Database

            foreach (var order in _orders)
                order.Save();

            return true;
        }
    }

    public class Order
    {
        public int OrderId { get; set; }
        public int PatientId { get; set; }
        public string ServiceOrdered { get; set; }

        public static IEnumerable<Order> GetAllForPatient(int patientId)
        {
            var orders = new List<Order>();
            using (var cn = new SqlConnection("your Order connection string"))
            {
                // ... load Orders Here.
            }
            return orders;
        }

        public bool Save()
        {
            //save order to database;
            return true;
        }
    }
}
使用System.Collections.Generic;
使用系统数据;
使用System.Data.SqlClient;
名称空间示例
{
公立病人
{
public int PatientId{get;set;}
公共字符串名称{get;set;}
私人IEnumerable_订单;
公共列表顺序{get{返回新列表(_Orders);}
公共静态患者GetById(int patientId)
{
使用(var cn=new-SqlConnection(“您的患者连接字符串”))
{
cn.Open();
使用(SqlCommand cm=cn.CreateCommand())
{
cm.CommandType=CommandType.Text;
cm.CommandText=“选择PatientId,患者姓名,其中PatientId=@PatientId”;
cm.Parameters.AddWithValue(“@PatientId”,PatientId);
使用(SqlDataReader dr=cm.ExecuteReader())
{
如果(!dr.Read())
返回null;
返回新患者
{
PatientId=dr.GetInt32(0),
Name=dr.GetString(1),
_orders=Order.GetAllForPatient(patientId)
};
}
}
}
}
公共bool Save()
{
//将患者保存到数据库
foreach(var订单在_订单中)
order.Save();
返回true;
}
}
公共阶级秩序
{
公共int-OrderId{get;set;}
public int PatientId{get;set;}
公共字符串ServiceOrdered{get;set;}
公共静态IEnumerable GetAllForPatient(int patientId)
{
var orders=新列表();
使用(var cn=new-SqlConnection(“您的订单连接字符串”))
{
//…在这里加载订单。
}
退货订单;
}
公共bool Save()
{
//将订单保存到数据库;
返回true;
}
}
}

您能告诉我如何回复吗?因为我是新用户,我不确定..请“我如何将数据从数据库获取到实体类”这就是我想要的表的关系。
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;

namespace Sample
{
    public class Patient
    {
        public int PatientId { get; set; }
        public string Name { get; set; }

        private IEnumerable<Order> _orders;
        public List<Order> Orders { get { return new List<Order>(_orders); } }

        public static Patient GetById(int patientId)
        {
            using (var cn = new SqlConnection("your Patient connection string"))
            {
                cn.Open();
                using (SqlCommand cm = cn.CreateCommand())
                {
                    cm.CommandType = CommandType.Text;
                    cm.CommandText = "SELECT PatientId, Name FROM Patient WHERE PatientId = @PatientId";
                    cm.Parameters.AddWithValue("@PatientId", patientId);

                    using (SqlDataReader dr = cm.ExecuteReader())
                    {
                        if (!dr.Read())
                            return null;

                        return new Patient
                                        {
                                            PatientId = dr.GetInt32(0),
                                            Name = dr.GetString(1),
                                            _orders = Order.GetAllForPatient(patientId)
                                        };
                    }
                }
            }
        }

        public bool Save()
        {
            // save Patient to Database

            foreach (var order in _orders)
                order.Save();

            return true;
        }
    }

    public class Order
    {
        public int OrderId { get; set; }
        public int PatientId { get; set; }
        public string ServiceOrdered { get; set; }

        public static IEnumerable<Order> GetAllForPatient(int patientId)
        {
            var orders = new List<Order>();
            using (var cn = new SqlConnection("your Order connection string"))
            {
                // ... load Orders Here.
            }
            return orders;
        }

        public bool Save()
        {
            //save order to database;
            return true;
        }
    }
}