powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Entity Framework(Model first)
12 сообщений из 12, страница 1 из 1
Entity Framework(Model first)
    #38824411
bald56rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго утра
кто нибуть может подсказать каким образом сделать модель исходя из следующих требований:
регистрация заявок и сохранение истории при изменении. т.е. необходима система учета обращений
если делать без Entity Framework то я делал так:
Заявки
CREATE TABLE dbo.Requests (
Id INT IDENTITY,
RequestId INT NOT NULL,
Registered DATETIME NOT NULL,
Author NVARCHAR(MAX) COLLATE Cyrillic_General_CI_AS NOT NULL,
Phone NVARCHAR(MAX) COLLATE Cyrillic_General_CI_AS NOT NULL,
UnitId INT NOT NULL,
PostId INT NOT NULL,
EquipmentId INT NOT NULL,
Description NVARCHAR(MAX) COLLATE Cyrillic_General_CI_AS NOT NULL,
Closed DATETIME NULL,
CONSTRAINT PK_Requests PRIMARY KEY (Id),
CONSTRAINT KEY_Requests UNIQUE (RequestId),
CONSTRAINT FK_Requests_Equipments_Id FOREIGN KEY (EquipmentId) REFERENCES dbo.Equipments (Id),
CONSTRAINT FK_Requests_Posts_Id FOREIGN KEY (PostId) REFERENCES dbo.Posts (Id),
CONSTRAINT FK_Requests_Units_Id FOREIGN KEY (UnitId) REFERENCES dbo.Units (Id)
) ON [PRIMARY]
GO

ИсторияЗаявок
CREATE TABLE dbo.RequestsHistory (
Id INT IDENTITY,
RequestId INT NOT NULL,
StateId INT NOT NULL,
StageId INT NOT NULL,
PerformerId INT NOT NULL,
Comment NVARCHAR(MAX) COLLATE Cyrillic_General_CI_AS NOT NULL,
Creator INT NOT NULL,
Created DATETIME NOT NULL,
CONSTRAINT PK_RequestsHistory PRIMARY KEY (Id),
CONSTRAINT FK_RequestsHistory_Requests_RequestId FOREIGN KEY (RequestId) REFERENCES dbo.Requests (RequestId),
CONSTRAINT FK_RequestsHistory_StagesRequest_Id FOREIGN KEY (StageId) REFERENCES dbo.StagesRequest (Id),
CONSTRAINT FK_RequestsHistory_StatesRequest_Id FOREIGN KEY (StateId) REFERENCES dbo.StatesRequest (Id)
) ON [PRIMARY]
GO

Добавление заявки происходило через транзакцию.т.е. сначала я добавлял запись в заявки затем в историю и при отсутствии ошибок делал комит иначе же откатывал.
При редактировании данной заявки я получал номер заявки, заполнял/редактировал поля необходимые для истории:
Описание полей для истории
StateId - состояние заявки;
StageId - этап выполнения;
Performer - назначенный исполнитель;
Comment - какой то коментарий;

каким образом сделать так же через EF/либо кто то может подсказать как сделать иначе(например потому что это правильней)
P.S.: во вложении картинка со схемой бд.
...
Рейтинг: 0 / 0
Entity Framework(Model first)
    #38826049
bald56rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
неужели никто не может подсказать?! если данный подход совсем недееспособный то может кто подскажет как организовать иначе!? смысл в следующем.необходимо организовать систему приема и учета заявок с сохранение промежуточных этапов жизни заявки. подумав сделал через WinForm, сейчас хочу попробовать это переделать на веб интерфейс.застопорился на том как сделать создание/редактирование заявки с сохранением части информации в другой таблице,не знаю как сделать представление при такой схеме. используется ASP.NET MVC(версии 3) Visual Studio 2012
...
Рейтинг: 0 / 0
Entity Framework(Model first)
    #38826054
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bald56rus, а при чем тут EF?
...
Рейтинг: 0 / 0
Entity Framework(Model first)
    #38826144
bald56rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хороший вопрос, Entity Framework для реализации модели в проекте(по крайней мере я так это вижу), может я чего то не понимаю и поэтому задаю вопрос неподобающим образом.т.е. я начинаю изучать ASP.NET MVC для создания модели базы данных использую данный фреймворк.в дальнейшем данную модель буду использовать в приложении.я не могу реализовать сущность исходя из приведенной схемы базы данных: т.е. сущность должна быть одна(как я понимаю) Заявка(Request) но часть информации должна храниться в другой таблице(HistoryRequest) - история изменений заявки.это возможно реализовать или данный подход неверен.вопрос то у меня заключается в этом
...
Рейтинг: 0 / 0
Entity Framework(Model first)
    #38826296
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bald56rus, у Вас есть база и Вы хотите сгененировать по ней набор сущностей?
...
Рейтинг: 0 / 0
Entity Framework(Model first)
    #38826303
bald56rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да, Базу я разрабатывал сторонними средствами(dbForge studio for SQL).в принципе можно базу сделать и заново если так будет правильней. смысл что у меня не получается реализовать сущность которая будет позволять хранить часть информации в одной таблице а часть в другой притом связь между ними одна-ко-многим.(одна заявка-много состояний)
...
Рейтинг: 0 / 0
Entity Framework(Model first)
    #38826319
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм...

Код: c#
1.
2.
3.
4.
public class Request
{
    public IEnumerable<RequestHistoryEntry> History { get; }
}



Только зачем искать историю вместе с Request? Да, можно сделать Lazy, но зачем Request-у "знать", что по нему какая-то история сохраняется?
...
Рейтинг: 0 / 0
Entity Framework(Model first)
    #38826329
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
искать таскать
...
Рейтинг: 0 / 0
Entity Framework(Model first)
    #38826332
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bald56rus, а вообще не обязательно использовать Entity Framework при изучении ASP.NET MVC.
...
Рейтинг: 0 / 0
Entity Framework(Model first)
    #38826344
bald56rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
покажу классы которые у меня есть:
Request
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
public class Request
    {
        public int Id { get; set; }
        public DateTime Registered { get; set; }
        public string Author { get; set; }
        public string Phone { get; set; }
        public int UnitId { get; set; }
        public int EquipmentId { get; set; }
        public string Description { get; set; }
        public DateTime? Closed { get; set; }

        public virtual Equipment Equipment { get; set; }
        public virtual Unit Unit { get; set; }
        public virtual ICollection<HistoryRequest> RequestHistory { get; set; }
    }



HistoryRequest
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
public class HistoryRequest
    {
        public int Id { get; set; }
        public int RequestId { get; set; }
        public int StateId { get; set; }
        public int PerformerId { get; set; }
        public string Comment { get; set; }
        public int Creator { get; set; }
        public DateTime Created { get; set; }

        public virtual StateRequest StatesRequest { get; set; }
        public virtual Request Request { get; set; }
    }


изучать что то лучше(имхо) на каком то конкретном примере а не абстрактном для себя выбрал пример реализация системы приема/учета заявок, может и не обязательно использовать EF просто все инструкции которые мне попадались на глаза использовали данную технологию, ну и я решил что в принципе знания лишними не бывают.при реализации этого же примера в WinForms я работал через ADO.NET запросы к базе данных напрямую, сейчас вот хотелось попробовать иначе(через EF) да и учет заявок наверно было бы лучше реализовать через веб технологии чем через формы
skyANAТолько зачем искать историю вместе с Request?история это неотъемлемая часть любой заявки.и необходимо получать история для дальнейшего анализа
...
Рейтинг: 0 / 0
Entity Framework(Model first)
    #38826858
bald56rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA, кажется я осмыслил что я делал не так.не могли бы Вы подсказать как переопределить связь между след. сущностями:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
public class Request
    {
        public int Id { get; set; }
        public int RequestId { get; set; }
        public DateTime Registered { get; set; }
        public string Author { get; set; }
        public string Phone { get; set; }
        public string Description { get; set; }
    }

и
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public class HistoryRequest
    {
        public int Id { get; set; }
        public int RequestId { get; set; }
        public int StateId { get; set; }
        public int PerformerId { get; set; }
        public string Comment { get; set; }
        public int Creator { get; set; }
        public DateTime Created { get; set; }
    }

как определить связь между ними по полю RequestId(1 Request - Many Histories)
...
Рейтинг: 0 / 0
Entity Framework(Model first)
    #38826903
Фотография EDUARD SAPOTSKI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bald56rus, добавляете к модели новый класс например: RequestAndHistory, прописываете в нем все свойства, которые необходимо отображать юзеру. Затем создаете метод например:
public IEnumerable<RequestAndHistory> GetRequestAndHistory(int requestId)
{
List<RequestAndHistory> items = new List<RequestAndHistory>();
// Здесь формируем этот список на основе линк-запросов к EF модели. Пишем какойнить хитрый джоин.
return items;
}

Второй вариант - сделать на уровне БД представления под все это дело и их перетащить в модель EF.
Ну и конечно можно все на хранимках написать.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Entity Framework(Model first)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]