2014-12-28 1 views
1

У меня есть JSON данные, как это:магазин JSON объект данных в базу данных в ASP.NET MVC (Entity Framework)

{ 
    "id":"", 
    "firstName":"John", 
    "lastName":"Doe", 
    "phones":[ 
     { 
     "value":"555-555-555", 
     "$$hashKey":"object:8" 
     }, 
     { 
     "value":"444-444-444", 
     "$$hashKey":"object:10" 
     } 
    ], 
    "emails":[ 
     { 
     "value":"[email protected]", 
     "$$hashKey":"object:12" 
     }, 
     { 
     "value":"[email protected]", 
     "$$hashKey":"object:18" 
     } 
    ], 
    "tags":[ 
     { 
     "value":"friend", 
     "$$hashKey":"object:14" 
     }, 
     { 
     "value":"john", 
     "$$hashKey":"object:16" 
     } 
    ], 
    "address":"Route 44", 
    "city":"NY", 
    "bookmarked":"", 
    "notes":"It's John" 
} 

Я хочу сохранить это JSON данные в базу данных, используя рамки сущности ASP.NET MVC (Использование базы данных Microsoft SQL). Моя модель автоматически генерируется из базы данных с использованием модели данных сущности данных ADO.NET. Проблема, с которой я столкнулся, заключается в том, что по какой-то причине она не будет хранить электронные письма/телефоны и теги в базе данных. Я пробовал все, что мог найти, и никто из них не работал для меня. Кто-нибудь знает, где проблема, и как я могу хранить этот JSON в моей базе данных?

EDIT 1:

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

Также я добавляю CONSTRAINT всех внешних ключей

Вот модель базы данных:

Database model

это автоматически генерируется модель из базы данных (модели данных EF)

public partial class Contact 
    { 
     public Contact() 
     { 
      this.Emails1 = new HashSet<Email>(); 
      this.Phones1 = new HashSet<Phone>(); 
      this.Tags1 = new HashSet<Tag>(); 
     } 

     public int id { get; set; } 
     public string firstname { get; set; } 
     public string lastname { get; set; } 
     public string address { get; set; } 
     public string city { get; set; } 
     public Nullable<byte> bookmarked { get; set; } 
     public string notes { get; set; } 

     public virtual ICollection<Email> Emails1 { get; set; } 
     public virtual ICollection<Phone> Phones1 { get; set; } 
     public virtual ICollection<Tag> Tags1 { get; set; } 
    } 
} 

и здесь модель для телефона/Метки/таблиц E-mail (это то же самое с другим именем в одном столбце)

public partial class Email 
    { 
     public int id { get; set; } 
     public int id_contact { get; set; } 
     public string email1 { get; set; } 

     public virtual Contact Contact1 { get; set; } 
    } 

и здесь функция добавления данных в базу данных:

public string AddContact(Contact contact) 
     { 
      if (contact != null) 
      { 

       db.Contacts.Add(contact); 
       db.SaveChanges(); 
        return "Contact Added"; 
      } 
      else 
      { 
       return "Invalid Record"; 
      } 
     } 
+0

Какая ошибка вы столкнулись? – Ofiris

+0

@Ofiris нет ошибки ... телефоны, теги и данные электронной почты из объекта JSON не хранятся в базе данных ... – jureispro

+0

Что делать, если вы меняете эти коллекции 'HashSet ' в 'List '? – dbc

ответ

3

Ваш JSON должен выглядеть следующим образом:

var json = { 
      "id": "123", 
      "firstName": "John", 
      "lastName": "Doe", 
      "phones": [ 
       { 
        "number": "555-555-555" 
       }, 
       { 
        "number": "444-444-444" 
       } 
      ], 
      "emails": [ 
       { 
        "email1": "[email protected]" 
       }, 
       { 
        "email1": "[email protected]" 
       } 
      ], 
      "tags": [ 
       { 
        "tag1": "friend" 
       }, 
       { 
        "tag1": "john" 
       } 
      ], 
      "address": "Route 44", 
      "city": "NY", 
      "bookmarked": "", 
      "notes": "It's John" 
     }; 

И я передать его следующим образом:

$.ajax({ 
      url: 'YourAddress', 
      data: { Action: 'CheckJson', JSONData: JSON.stringify(json) }, 
      dataType: "json", 
      async: false, 
      success: function (data) { 
      }, 
      error: function (x, e) { 

      } 
     }); 

Then Загрузить JSON.Net

И сделать что-то вроде этого:

string json = request["JSONData"]; 
Contact m = JsonConvert.DeserializeObject<Contact>(json); 

«Идентификатор» не должен быть пустым, потому что по DeserializeObject вы получите исключение.

Я надеюсь, что это вам поможет.

Смежные вопросы