我正在使用C#在Visual Studio 2017中进行编码,并试图以一种相关的方式将属性/模型类包起来(我已经看了很多小时的教程/示例!)

我知道我可以创建一个具有名称,货币等属性的Customer类,以及另一个具有电话号码,国家/地区等地址的类。

我不明白的是如何使用MS SQL数据库以关系方式创建它们。 例如,我创建了一个客户“ ACME Inc.” 它的属性之一是PrimaryAddress,它的类型设置为“ Address”,因此我可以直接链接到该地址的属性,但是,如果我需要根据从表中读取的数据来创建属性,我将不知道该怎么做。 当然可以执行customer1.PrimaryAddress.Country = Canada,或分别创建一个称为Address1的地址对象,但是如何使用Customer的属性引用现有的Address对象?

例:

    public class Customer
    {
            public string Name { get; set; }
            public bool Enabled { get; set; }
            public CAddress PriAddress { get; set } //This points to an object created using the CAddress class below. each customer has only 1 primary address
    }

    public class CAddress
    {
            public int CustomerID { get; set; } //This specifies which Customer this address belongs to
            public string Name { get; set; }
            public string MainNum { get; set; }
    }

我不确定我所说的话是否有意义,所以请让我知道其他信息是否有帮助。 谢谢!

#1楼 票数:1 已采纳

您所说的是数据库对象和类之间的映射。
从数据库加载数据时,您只需创建具有所有相关属性(其他相关表)的预期类型的​​实例。

 SELECT c.Id
    , c.Name
    , a.Id As AddressId
    , a.Street As AddressStreet
 FROM Customer c
     INNER JOIN Address a ON a.CustomerId = c.Id

var query = "SELECT ...";
using (var connection = new SqlConnection())
using (var command = new SqlCommand(query, connection))
{
    var customers = new List<Customer>();
    connection.Open();
    using (var reader = command.ExecuteReader())
    {
        while(reader.Read())
        {
            var customer = new Customer
            {
                Id = reader.GetInt32(0),
                Name = reader.GetString(1),
                PrimaryAddress = new Address
                {
                    Id = reader.GetInt32(2),
                    Street = reader.GetString(3)
                }
            };

            customers.Add(customer);
        }
    }
}

当然,您可以使用一些ORM框架,使您的映射代码更加优雅,并且所有映射工作都将由ORM框架完成。
实体框架示例返回包含地址的所有客户

using (var dbContext = new CustomerDbContext(connectionString))
{
    return dbContext.Customers.Include(customer => customer.PrimaryAddress).ToList();
}

#2楼 票数:0

如果我理解正确,那么您要问的是,如果您检索一个客户列表(可能只是一个客户)和一个地址列表(可能只是一个地址),那么如何将每个地址与每个客户匹配,对吗?

如果是这种情况,我要做的是为这两个类定义一个公共属性,即:CustomerId,然后,一旦有了实例,就循环遍历两个集合以为客户分配正确的地址通过通用的CustomerId。

LINQ使这种关系映射更容易实现。

  ask by 007bond007 translate from so

未解决问题?本站智能推荐:

1回复

获取模型C#的属性

今天,我有一个问题,我无法访问我的模型的值: 我只想要该模型的用户名。 设置该值可以正常工作(发生在另一个类中)。 是否有可能从清单中获得价值? 我已经尝试过: 但这也不起作用。 有什么想法如何在不提出新广告请求的情况下获取用户名? 提前致谢 编辑
4回复

使用LINQ C#创建新对象时如何访问内部属性?

我有一个模特班级名字的人 我有一个ObservableCollection,即PersonsList。 现在,我将初始化ObservableCollection 在这里,我需要从cars属性中分配NoOfCars ,而不必手动将值设置为2或通过显式使用外部string []变量
1回复

C#属性的有序列表,用于常见操作?

背景:我有一个具有7个属性的ViewModel表单,每个ViewModel代表向导的各个部分,并且都实现IFormSection。 我正在尝试在多节AJAX客户端和禁用了单节JavaScript的客户端之间为这些ViewModel使用单一定义(即DRY / SPoT)。 将这些属性作为属
1回复

从C#中的属性检索数据类型?

我想动态地检索模型(类)中属性的数据类型。 因此UserInfo是具有许多属性的模型类, //输出为System.String 但是我只想输出没有完整URL的字符串,int或bool,例如System.Something.Something.int等。我只想输出:string,i
1回复

C#-使用动态名称选择嵌套模型属性

我有一个变量,它将是动态的。 例如,我有一个模型。 有一个叫做...的属性 我想使用动态名称在模型中选择一个属性。 这可能吗 ? 谢谢
1回复

C#最佳做法-从BLL设置只读模型属性值

考虑以下内容: 我有一个带有字符串属性的模型,该模型只有一个get访问器,我们不希望直接设置该值。 该属性的值在BLL(另一个库)中计算。 在不使用反射的情况下设置属性值的最佳方法是什么? 为了澄清起见,面临的挑战是Name值必须是不变的。 经常访问和修改同一模型。
2回复

如何设计“一些可用值中的一个,可以进行进一步选择”属性(最好在C#中)?

假设您需要开发一个应用程序,例如C#WPF,用户可以在其中选择某个选项的值,而该选择定义了其他选项的可用值,依此类推。 例如,让我们考虑一下汽车的结构。 用户选择品牌,型号和修剪。 所有这些属性都有一个有限且预定义的可用值列表,例如供制造的“ Toyota”,“ Honda”,“
1回复

您将如何在C#中建模JSON

我有一个像JSON 和像这样的模型 当我使用它时,我正在做myObject["Difficult"]; 但是我需要做类似if(myObject.Difficult).. 重复建议的注意事项:该建议无关紧要,因为正如标题所述,我的问题是关于在C#中建模JSON,而不是进