我希望能够做到以下几点:
我有一个模型,里面有一个实体。
该实体具有以下结构:
public class Client
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}
我现在想要的是根据 id 获取客户端名称。因此,我编写了一个执行此操作的存储过程。
CREATE PROCEDURE [Client].[GetBasics]
@Id INT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
SELECT
Name
FROM Client.Client
INNER JOIN Client.Validity ON ClientId = Client.Id
WHERE
Client.Id = @Id;
END
现在,回到 VS,我确实从包含存储过程的数据库中更新了模型。
下一步是将此存储过程映射到客户端实体作为函数导入。
这也很好用。
现在尝试在运行时加载一个客户端的名称会导致错误...
“数据读取器与指定的‘CSTestModel.Client’不兼容。类型的成员‘Id’在数据读取器中没有对应的同名列。”
我对消息没意见。我知道如何解决这个问题(作为结果集 ID、名称、描述返回)。
我对这个问题的想法如下:
我只想加载实体的一部分,而不是完整的实体本身。我在这里有一个限制,只能使用存储过程来进行与数据库的整个通信。
我的问题是否有解决方案(除了在结果集本身上创建复杂类型、LINQ)?如果是的话,有人能指出我正确的方向吗?
非常感谢,
迪米