Проблема с сериализацией WCF с EF

#c# #sql-server #entity-framework #wcf

#c# #sql-сервер #entity-framework #wcf

Вопрос:

Я получаю это странное исключение в службе WCF Exception thrown: 'System.Runtime.Serialization.SerializationException' in System.Runtime.Serialization.dll

Вот приведенная схема базы данных: Схема БД

Вот как это создается в DB:

 CREATE TABLE [appUser] (
  [use_id] int PRIMARY KEY  IDENTITY(1,1),
  [firstName] nvarchar(150),
  [lastName] nvarchar(150),
  [gender] nvarchar(10) DEFAULT 'M',
  [phoneNo] nvarchar(150) NOT NULL,
  [image] nvarchar(max) DEFAULT 'abcdlkfs',
  [userType] nvarchar(50) NOT NULL,
  [smsConfirmationCode] nvarchar(10),
  [smsVerifed] nvarchar DEFAULT '0',
  [createdOn] DATETIME DEFAULT GETDATE(),                
);


CREATE TABLE [parent] (
  [par_id] int PRIMARY KEY IDENTITY(1,1),
  [use_id] int FOREIGN KEY REFERENCES [appUser](use_id),
  [CNIC] nvarchar(150),
);


CREATE TABLE [student] (
  [stu_id] int PRIMARY KEY IDENTITY(1,1),
  [use_id] int FOREIGN KEY REFERENCES [appUser](use_id),
  [par_id] int FOREIGN KEY REFERENCES [parent](par_id),
  [regNo] nvarchar(150),
  [section] nvarchar(1) DEFAULT 'A',
  [discipline] nvarchar(150),
  [semesterNo] int DEFAULT 1,
  [isFreeze] bit DEFAULT 0,
  [admmisionDate] datetime DEFAULT GETDATE(),
  [semesterUpdateDate] datetime,
);


CREATE TABLE [teacher] (
  [tea_id] int PRIMARY KEY IDENTITY(1,1),
  [use_id] int FOREIGN KEY REFERENCES [appUser](use_id),
  [empNo] nvarchar(150),
);


CREATE TABLE [message] (
  [msg_id] int PRIMARY KEY IDENTITY(1,1),
  [from] int FOREIGN KEY REFERENCES [appUser](use_id),
  [to] int FOREIGN KEY REFERENCES [appUser](use_id),
  [body] nvarchar(max),
  [sentOn] datetime DEFAULT GETDATE(),
  [deliveredOn] datetime DEFAULT NULL,
  [status] nvarchar(30) DEFAULT 'pending',
);

 

Теперь, после добавления Entity Framework 6.x в проект WCF, он начинает давать get ugly 😭, вот что происходит:

EF 6.x

ЕСЛИ запись пуста, она возвращает пустой массив [] , это нормально, но когда есть какая-то запись, она просто выбрасывается во время выполнения.Исключение сериализации и сброс соединений с клиентом. (Сообщение об исключении можно увидеть только в окне вывода Visual Studio)

ЕСЛИ я отлажу это, даже данные вернутся нормально: Изображение окна отладки

Но после того, как я продолжу процесс, это произойдет в Visual Studio: Окно вывода VS

Это то, что мы видим у ПОЧТАЛЬОНА: Вывод Postman

РЕДАКТИРОВАТЬ: после дополнительного анализа: вот что такое сообщение об ошибке:

Введите ‘System.Data.Entity.DynamicProxies.appUser_CB3ECC520FC14134E25C71D649FF5FCD8A0830D35A865C6798E272A4515435E1’ с именем контракта данных ‘appUser_CB3ECC520FC14134E25C71D649FF5FCD8A0830D35A865C6798E272A4515435E1:http://schemas.datacontract.org/2004/07/System.Data.Entity.DynamicProxies‘ не ожидается. Рассмотрите возможность использования DataContractResolver, если вы используете DataContractSerializer, или добавьте любые типы, которые не известны статически, в список известных типов — например, с помощью атрибута KnownTypeAttribute или добавив их в список известных типов, переданных сериализатору.

Комментарии:

1. Мне кажется, что что-то не так с процессом сериализации и десериализации. Взгляните на docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details /…

2. @AbrahamQian Я уже перепроверил все типы данных, они в порядке