C#使用从存储过程中检索到的数据填充内部对象



我有以下类:

public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Company { get; set; }
public string AddressLine1 { get; set; }
public string AddressLine2 { get; set; }
public string City { get; set; }
public string State { get; set; }
public string ZipCode { get; set; }
public PhoneNumber BusinessPhone { get; set; }
public PhoneNumber ResidencePhone { get; set; }
public string Email { get; set; }
}

从上面可以看出,我有一个包含PhoneNumber对象的Person类。PhoneNumber类将具有以下定义:

public class PhoneNumber
{
public string AreaCode { get; set; }
public string Phone { get; set; }
public string Extension { get; set; }
}

现在,为了填充Person对象,我从如下存储过程中获取数据:

_context.PersonDetails.FromSqlRaw<Person>("EXEC [GetPersonDetails] @personId={0}", personId).FirstOrDefaultAsync();

我的存储过程如下:

CREATE PROCEDURE GetPersonDetails
@personId UNIQUEIDENTIFIER NOT NULL
AS
SET NOCOUNT ON;
SELECT TOP 1 
FirstName, LastName,
FirmNameCust,
Addr1, Addr2,
City, [State],
ZipCode,
FirmNameCust [Company],
Addr1 as AddressLine1,
Addr2 as AddressLine2,
City as City,
State as State,
ZipCode as ZipCode,
ResAreaCode as ResidentialAreaCode, 
ResPhone as ResidentialPhone,
ResExt as ResidentialExtension, 
BusAreaCode as BusinessAreaCode,
BusPhone as BusinessPhone,
BusExt as BusinessExtension
FROM
Person 
WHERE
personId = @personId

根据上面的代码,我如何用存储过程中的信息填充电话号码对象?

提前谢谢。

构建Person的方式实际上更像是应该有一个单独的表,其中包含电话号码以及Person和PhoneNumber 之间的关系

也就是说,别忘了EF只是设置它看到的道具,这些道具可以很容易地得到其他东西的支持,而不是X类上的简单道具

public class Person{
public PhoneNumber BusinessPhone {get;set;} = new();
public string BusinessAreaCode {
get => BusinessPhone.AreaCode;
set => BusinessPhone.AreaCode = value;
}

当EF完成将您的结果集映射到您的实体时,BusinessPhone详细信息将被填充。。

如果你不喜欢有这些额外道具的想法,不要忘记eF也可以使用构造函数来填充对象。。

最新更新