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是很麻烦的,而且似乎没有必要。