Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架4中的部分映射_C#_.net_Entity Framework 4 - Fatal编程技术网

C# 实体框架4中的部分映射

C# 实体框架4中的部分映射,c#,.net,entity-framework-4,C#,.net,Entity Framework 4,我希望能够做到以下几点: 我有一个模型,里面有一个实体 该实体具有以下结构: public class Client { public int Id { get; set; } public string Name { get; set; } public string Description { get; set; } } 我现在想要的是,根据id获取客户机名称。 因此,我编写了一个存储过程来实现这一点 CREATE PROCEDURE [Client].[Ge

我希望能够做到以下几点:

我有一个模型,里面有一个实体

该实体具有以下结构:

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”无效。A “Id”类型的成员不存在 在列表中有相应的列 具有相同名称的数据读取器。“

我同意这个消息。我知道如何解决这个问题(作为结果集Id、名称、描述返回)

我对这个问题的看法如下:

我只想加载实体的一部分,而不是整个实体本身。 我在这里有一个限制,就是在与数据库的整个通信中只使用存储过程

我的问题有解决方案吗(除了创建复杂类型,结果集本身的LINQ)? 如果是的话,有人能给我指出正确的方向吗

非常感谢,


Dimi

只需投影到POCO上:

var q = from c in Context.Clients
        select new NameOnlyPresentation
                   {
                       Id = c.Id,
                       Name = c.Name
                   };
。。。或者只是名字:

public string ClientName(int id)
{
    return (from c in Context.Clients
            where c.Id == id
            select c.Name).FirstOrDefault();
}

只需投影到POCO上:

var q = from c in Context.Clients
        select new NameOnlyPresentation
                   {
                       Id = c.Id,
                       Name = c.Name
                   };
。。。或者只是名字:

public string ClientName(int id)
{
    return (from c in Context.Clients
            where c.Id == id
            select c.Name).FirstOrDefault();
}

好吧,忘了提到我也知道这个:)将编辑我的问题,使之更精确。如果你知道真正简单的解决方案,你的问题中有什么驱使你要求一个非常困难的解决方案?听起来这里缺少了一些东西。使用存储过程和获得EF映射特性的好处让我感到很有必要,我认为部分填充对象也是一件有用的事情。必须为每种类型的部分总体生成一个不同的poco是很麻烦的,而且似乎没有必要。嗯,忘了提到我也知道这一点:)将编辑我的问题,使其更精确。如果你知道真正简单的解决方案,你的问题中有什么驱使你要求一个非常困难的解决方案?听起来这里缺少了一些东西。使用存储过程和获得EF映射特性的好处让我感到很有必要,我认为部分填充对象也是一件有用的事情。必须为每种类型的部分人口生成不同的poco是很麻烦的,而且似乎没有必要。