简体   繁体   English

如何使用实体框架实现数据库逻辑?

[英]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.

相关问题 如何使用实体框架实现业务逻辑? - How to implement business logic using Entity Framework? 在实体框架上实施业务逻辑 - Implement Business Logic on Entity Framework 当使用实体框架作为数据访问层时,如何实现业务逻辑层? - How do you implement a business logic layer when using entity framework as data access layer? 如何实现数据库播种以使用 Entity Framework 进行测试 - How to implement database seeding for testing with Entity Framework 如何使用“数据库优先方法”使用 Firebird 数据库实现 Entity Framework Core 3.1.2 - How to implement Entity Framework Core 3.1.2 with Firebird database using 'database first approach' 如何使用实体框架实施三层方法? - How to implement 3 tier approach using Entity Framework? 在Entity Framework 6.0中实现具有多个数据库上下文类的事务逻辑单个数据库的最佳方法 - Best way to implement Transaction Logic single Database with Multiple DB Context Class in Entity Framework 6.0 您好,告诉我如何使用列表框中的实体框架 WPF MVVM 模式从数据库中实现数据 output - Hello, tell me how to implement data output from a database using Entity Framework in a Listbox WPF MVVM Pattern 如何在 Entity Framework 6 Database First 中对导航属性实现乐观并发 - How to implement optimistic concurrency on navigation properties in Entity Framework 6 Database First 使用实体框架时如何创建 BLL(业务逻辑层)? - How to create BLL (Business logic Layer) when using Entity Framework?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM