2013-02-03 45 views
3

我正在使用基於PetaPoco(DotNetNuke 7.0)的數據訪問層。在使用相對簡單的對象時,我已經成功地使用了它,但是現在我必須插入一個至少包含一個屬性的對象,該屬性是其他對象的列表。PetaPoco(DotNetNuke)和SQL - 使用List屬性或其他複合對象添加對象

例如:

class Person 
{ 
    public Person(){} 
    public string name { get; set; } 
    public List<Address> addresses { get; set; } 
} 
class Address 
{ 
    ... 
} 

我正在使用的實際對象比上面的例子複雜得多 - 有在物體的至少四個複合List對象將被插入到庫中。

我想什麼,能夠做的就是在SQL定義表,並能夠做一個簡單的調用PetaPoco這樣的:

public static void AddOrder(Person person) 
{ 
    using (IDataContext context = DataContext.Instance()) 
    { 
     var repository = context.GetRepository<Person>(); 
     repository.Insert(person); 
    } 
} 

的背景是該對象是從Knockout/jQuery前端傳遞給Web服務,以便將JSON字符串轉換爲數據對象,然後將該數據對象存儲在數據庫中。

我認爲有三個問題,真正做到:

  1. 我怎樣寫這代表人事和包含地址列表中的SQL表?

  2. 如何編寫必要的PetaPoco代碼以將Person對象與其包含的任何對象一起插入?

  3. 我應該忘記試圖將對象存儲在數據庫中,而只是將JSON字符串存儲在數據庫中嗎?

爲尋找謝謝:)

回答

1

我還沒有安裝的DotNetNuke 7然而,迄今爲止我在檢查CodePlex上的源代碼,我認爲你可以這樣來做:

public static void AddOrder(Person person) 
{ 
    using (IDataContext context = DataContext.Instance()) 
    { 
     var repositoryPerson = context.GetRepository<Person>(); 
     var repositoryAddrress = context.GetRepository<Address>(); 

     context.BeginTransaction(); 
     try 
     { 
      repositoryPerson.Insert(person); 
      foreach(var address in person.addresses) 
      { 
       repositoryAddress.Insert(address); 
      } 
      context.Commit(); 
     } 
     catch (Exception) 
     { 
      context.RollbackTransaction(); 
      throw; 
     } 
    } 
} 

我沒有測試過,所以我不能保證它能正常工作,但是這對我來說似乎是正確的。

+0

我會嘗試一下,並會回報 - 謝謝:) – user2025399

+0

@ user2025399那麼,你是怎麼做到的? – Alexander

相關問題