Почему мой метод сохранения всегда дает исключение, не сохраняя значения - PullRequest
1 голос
/ 03 апреля 2019

В моей системе 3 модели

Public class Company {Id,Name}//Already have data

Public Class User {Id, Name}//Already have data

Public Class Department {Id,Name,CompanyId,UserId,Public Company Companies,Public User Users}

Теперь я хочу создать данные Seed для моей модели отдела.Код внутри моего начального класса данных;

if(!context.Department.Any()){

try {
var departments = new Department[]{
 new Department{ComapnyId=context.Companies.Single(s => s.Name=="Stackoverflow").Id,
     UserId =context.Users.Single(s => s.Name=="Admin").Id, Name="IT"}
};
  foreach (Department department in departments)
                        {
                            context.Department.Add(department);                         
                        }
                        context.SaveChanges();
}catch (Exception e)
            {
                throw new Exception(e.Message);
            }//End Try and Catch
}//End If

Теперь мой метод сохранения проблемы всегда отбрасывает исключение.

Что я делаю неправильно ??

Моя Stacktrace: at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action 1 wrapCloseInAction) в System.Data.SqlClient.SqlInternalConnection.OnError (исключение SqlException, логическое breakConnection, действие 1 wrapCloseInAction) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() at System.Data.SqlClient.SqlDataReader.get_MetaData() at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, TaskCompletionSource 1 завершение, тайм-аут Int32, задача и задача, логический asyncWrite, метод String) в System.Data.SqlClimand.Exq.(поведение CommandBehavior) при System.Data.SqlClient.SqlCommand.ExecuteDbDataReader (поведение CommandBehavior) при System.Data.Common.DbCommand.ExecuteReader () в Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.Execute (IRelationalConnection связи, DbCommandMethod ExecuteMethod, IReadOnlyDictionary2 parameterValues) at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.ExecuteReader(IRelationalConnection connection, IReadOnlyDictionary 2 parameterValues) в Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.Execute (соединение IRelationalConnection) --- Конец внутренней трассировки стека исключений --- `

1 Ответ

0 голосов
/ 03 апреля 2019

Вам необходимо правильно настроить отношения между вашими моделями, как показано ниже:

  • У каждого пользователя будет одна компания и один отдел
  • В каждом отделе будет одна компания и много пользователей
  • У каждой компании будет много пользователей и много отделов

Итак, ваши модели данных должны быть такими, как показано ниже:

public class User {
    public int Id { get; set; }
    public string Name { get; set; }

    public int CompanyId { get; set; }
    public Company Company { get; set; }

    public int DepartmentId { get; set; }
    public Department Department { get; set; }
}

Public class Department {
    public int Id { get; set; }
    public string Name { get; set; }

    public int CompanyId { get; set; }
    public Company Company { get; set; }

    public ICollection<User> Users { get; set; }
}

public class Company {
    public int Id { get; set; }
    public string Name { get; set; }

    public ICollection<Department> Departments { get; set; }

    public ICollection<User> Users { get; set; }
}

позже мы увидим, какую ошибку высталкиваются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...