Как реализовать логику базы данных с помощью Entity Framework? - PullRequest
1 голос
/ 28 апреля 2019

У меня есть вопрос относительно EF и баз данных.Я обновляю свое приложение с прежнего Ado.net до EF, но в моем коде основная бизнес-логика была написана на уровне базы данных.

Мой вопрос заключается в том, нужно ли мне перенести эту логику с уровня базы данных на кодуровень, если я хочу использовать EF или могу использовать ту же логику базы данных с EF.

Например, одно из моих требований:

#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

Но когда я используюEF, тогда он создаст класс для условия if(), а не для другого требования #

Класс:

public partial class Getemp123_Result
{
        public string Name { get; set; }
        public string FirstName { get; set; }
        public Nullable<int> Salary { get; set; }
}

1 Ответ

1 голос
/ 28 апреля 2019

Поскольку ваш проект мигрирует из WinForm App с текущей существующей базой данных и хранимой процедурой.

Вы должны выбирать только таблицы (не выбирать хранимую процедуру) при генерации EF Designer из базы данных.

И вы можете определить свой 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; }
}

В вашей бизнес-логике вы можете обрабатывать логику, такую ​​как

SqlParameter param1 = new SqlParameter("@gender", "male");
var result = db.Database.SqlQuery<YourType>("exec Getemp123 @gender", param1);

Другим способом, если вы не хотитедля создания 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...