【发布时间】:2018-01-03 17:08:09
【问题描述】:
我不敢相信我必须问这个问题,但我被困住了。我花了三个小时试图弄清楚这一点,但我被困住了。
我能够在以前版本的 C# 中执行此操作,但别名我被卡住了。
在我继续之前是我正在处理的堆栈...
- Visual Studio 2012
- SQL Server 2012
- .NET Framework 3.5(我尝试过不同版本,结果相同)。
考虑以下 SQL 代码:
create table dbo.customers
(
customerid int not null identity(1,1),
fname varchar(50),
lname varchar(50),
favfruit varchar(30)
)
go
alter table customers
add constraint customers_customerid_pk primary key (customerid)
insert into customers(Fname, lname, favfruit)
values ('Melissa', 'Smith', 'Apple'),
('Jennifer', 'Jones', 'Pear'),
('Jill', 'Brown', 'Apple')
create function dbo.fngetfruit(@customerid int)
returns varchar(30)
as
begin
declare @favfruit varchar(30)
select @favfruit = favfruit
from dbo.customers c (nolock)
where c.customerid = @customerid
return @favfruit
end
select dbo.fngetfruit(2)
这段代码创建了一个表(customers)和一个用户定义的函数(fngetfruit)。此函数采用 customerid 并从 customer 表中返回该客户最喜欢的水果。
到目前为止一切顺利。一切正常。
现在我想使用实体框架从 C# 控制台应用程序调用我的函数 (fngetfruit)。
创建一个新的控制台应用程序。
从解决方案资源管理器的控制台应用程序内部,右键单击应用程序名称。选择添加 ==> 新项 ==> ADO.NET 实体数据模型。
我将 .edmx 文件命名为 CustomersEF。
选择从数据库生成。设置您的连接。我取了customersEntities的默认实体连接名称。点击下一步。
在选择您的数据库对象和设置屏幕中,选择客户表和 fngetfruit 函数。单击完成。
接下来,您将进入一个显示数据库图表的屏幕。就我而言,我只有一个名为 customer 的表。该功能无处可寻。
打开控制台应用程序的主要功能。
以下代码有效...
var cusDb = new customersEntities();
var custable = cusDb.customers;
但是下面的代码不起作用..
var cusDb = new customersEntities();
var favfruit = cusDb.fngetfruit(1);
为什么我无法访问我的功能?我错过了什么?就像我说的,上述步骤在早期版本中对我有用。
谢谢,
【问题讨论】:
-
使用以前版本的
c#?我觉得这难以置信。 -
可能您需要将其作为函数导入?这可能有助于stackoverflow.com/a/32359095/2946329
-
稍微绕道....在继续在任何地方使用 NOLOCK 提示之前,您可能会先阅读此内容。 blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere
-
@CamiloTerevinto 当我第一次学习实体框架的基础知识时,用户定义的函数才起作用。不是,他们似乎需要额外的步骤。
-
对这个问题投了反对票的人需要一个拥抱!
标签: c# .net sql-server entity-framework