[英]How to implement database logic using Entity Framework?
I do have a question regarding EF and databases.我确实有一个关于 EF 和数据库的问题。 I am upgrading my application from former Ado.net to EF but in my code major business logic has been written at the database level.
我正在将我的应用程序从以前的 Ado.net 升级到 EF,但在我的代码中,主要业务逻辑已在数据库级别编写。
My question is whether I need to have shift that logic from the database level to code level if I want to use EF, or if I can go with the same database logic with EF.我的问题是,如果我想使用 EF,是否需要将该逻辑从数据库级别转移到代码级别,或者我是否可以使用与 EF 相同的数据库逻辑。
For example, one of my requirements is:例如,我的要求之一是:
#Procedure#
CREATE PROCEDURE Getemp123
(@gender VARCHAR(40))
AS
BEGIN
IF (@gender = 'Male')
SELECT
D.Name, E.FirstName, E.Salary
FROM
Employees E
LEFT JOIN
Departments D ON D.ID = E.DepartmentId
WHERE
Gender = @gender
ELSE
SELECT
D.ID, E.FirstName, E.LastName
FROM
Employees E
LEFT JOIN
Departments D ON D.ID = E.DepartmentId
WHERE
Gender = @gender
END
But when I am using EF, then it will create class for if()
condition not for else requirement #但是当我使用 EF 时,它将为
if()
条件创建类,而不是为 else 要求创建类#
Class:班级:
public partial class Getemp123_Result
{
public string Name { get; set; }
public string FirstName { get; set; }
public Nullable<int> Salary { get; set; }
}
Because your project is migrating from WinForm App with current existing database and stored procedure.因为您的项目是从 WinForm App 迁移到当前现有的数据库和存储过程。
You should only select tables (do not select stored procedure) when generate EF Designer from database.从数据库生成 EF Designer 时,您应该只选择表(不要选择存储过程)。
And you can define your ViewModel
like你可以像这样定义你的
ViewModel
class YourType
{
public int ID { get; set; }
public string Name { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int? Salary { get; set; }
}
In your Business Logic you can handle logic like在您的业务逻辑中,您可以处理类似的逻辑
SqlParameter param1 = new SqlParameter("@gender", "male");
var result = db.Database.SqlQuery<YourType>("exec Getemp123 @gender", param1);
Another way if you don't want to create YourType
, you can use dynamic object.如果您不想创建
YourType
,另一种方法是使用动态对象。
var result = db.Database.SqlQuery<dynamic>("exec Getemp123 @gender", param1);
foreach(var item in result)
{
var firstname = item.FirstName;
//check property in dynamic before using
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.