0

Я вернулась в инфраструктуру Entity для проекта. Мои отношения с базой данных выполняются в базе данных, а не только на бизнес-уровне.Entity Framework, сохраняющая запись в DB

У меня есть ограничение внешнего ключа, когда я пытаюсь добавить запись, в которой есть только что созданная дочерняя запись.

Ниже приведен простой пример моего стола и кода.

Главная Таблица

  • Id Int (рк)
  • ChildId Int (Ф.К.)
  • Имя NVARCHAR (50)

Детский стол - Id INT (pk) - Наименование nvarch (50)

private static int addChild(string name) 
    { 
     using (var context = new DatabaseEntity()) 
     { 
      var table = new DBChildTable() { Name = name }; 
      context.DBChildTable.Add(table); 
      context.SaveChanges(); 

      return table.Id; 

     } 
    } 

    private static int addMain(int childId, string name) 
    { 
     using (var context = new DatabaseEntity()) 
     { 
      var table = new DBMainTable() { Name = name, ChildId = childId }; 
      context.DBMainTable.Add(table); 
      context.SaveChanges(); 

      return table.Id; 

     } 
    } 

    private static void basiceLogic() 
    { 
     int childId = addChild("Child"); 
     addMain(childId, "Main"); 
    } 

Я использую инфраструктуру Entity 6 и базу данных конца SQL-сервера.

Я помню, что мне нужно было добавить команду в контекст или где-нибудь, чтобы передать код, чтобы сохранить запись из базы данных Entity в базу данных.

Любая помощь?

Благодаря

+0

В чем Ваш вопрос? Код, который вы поделили, должен работать. – lorond

+0

SaveChanges() - это команда :) – marius

+0

Привет, я знаю. Когда я перехожу к второму методу добавления основных элементов, он жалуется на ограничение внешнего ключа на childId. Но если снова запустить метод, используя childId с первой попытки, он работает. –

ответ

0

Проведя слишком долго по этому вопросу и идти вперед и назад между форумами, я наконец-то нашел результат.

Ниже приведен код, который мне пришлось изменить, чтобы заставить его работать, но теперь он работает. (Используемый код - это код в этом примере)

Мне нужно было добавить размещение и воссоздать контекст. Хотя я изначально имел контекст в логике использования и статическом методе, контекст действительно не располагал. Таким образом, новая запись базы данных не будет сохраняться в db, прежде чем она будет запрошена во второй вставке.

Спасибо всем, кто пытался помочь, но подумал, что я поставил бы мое решение, просто там, там кто-то другой, у которого есть эта хорошая маленькая проблема.

private static Models.Blog.blogEntity context; 
    public static string AddComment(int blogId, string email, string name, string comment) 
    { 
     context = new Models.Blog.blogEntity();     
     string blogName = String.Empty; 

     blogName = Models.Blog.Queries.BlogQuery.NameById(blogId); 

     getUserId(email); 

     createUser(email, name); 

     context.Dispose(); 
     context = new Models.Blog.blogEntity(); 

     createComment(blogId, userId, comment); 

     context.Dispose(); 
     return blogName; 

    } 


    private static void getUserId(string email) 
    { 
     userId = 0; 
     var user = context.users.FirstOrDefault(x => x.emailAddress.Equals(email)); 
     if(user !=null) 
     { 
      userId = user.id; 
     } 
    } 

    public static void createUser(string emailAddress, string name) 
    { 
     if(userId.Equals(0)) 
     { 
      var data = new Models.Blog.user() 
      { 
       emailAddress = emailAddress, 
       name = name, 
       password = "NOT NEEDED", 
       userlevel = 0, 
       created = DateTime.Now 
      }; 
      context.users.Add(data); 
      context.SaveChanges();     
      userId = data.id; 
     }   


    } 

    public static void createComment(int blogId, int userId, string comment) 
    {   

     var data = new Models.Blog.comment() 
     { 
      body = comment, 
      blogId = blogId, 
      createdBy = userId, 
      created = DateTime.Now 
     }; 
     context.comments.Add(data); 
     context.SaveChanges(); 
     commentId= data.id;   
    } 
Смежные вопросы