2017-05-19 11 views
0

내 applocation 내에서 petapoco poco는 빈 객체 (모든 값이 null 임)를 반환합니다. 내 Umbraco 7.5.12 안에 UI-O-Matic Nuget 패키지 사용.PetaPoco가 빈 객체를 반환합니다.

쿼리 내가 현재 실행 해요 :

[UIOMatic("ObjectsDB", "Object", "Object", FolderIcon = "icon-globe-inverted-europe-africa", ItemIcon = "icon-pin-location", RenderType = UIOMaticRenderType.List)] 
     [TableName("ObjectsDB")] 
     [PrimaryKey("Id", autoIncrement = false)] 
     [ExplicitColumns] 
     public class ObjectDB 
     { 
      [PrimaryKeyColumn(AutoIncrement = true)] 
      public int Id { get; set; } 

      [UIOMaticListViewFilter] 
      [UIOMaticListViewField(Name = "Name")] 
      [UIOMaticField(Name = "Name", Description = "Name")] 
      public string Name { get; set; } 
} 

하는 debuging 때 :

`Debug result: con.Single<ObjectsDB>("select Name, Id from ObjectsDB where Id = 4") 

이 개체를 retruns

var dbContext = ApplicationContext.Current.DatabaseContext; 

    var objects = dbContext.Database.Fetch<ObjectDB>("select Id, Name, CreatedOn, PlaceId, InActive, CityMapping, CountryIsoMapping, Globalsearch from ObjectsDB"); 
    return objects.Where(n => n.PlaceId == PlaceId).FirstOrDefault(); 

TableDB 같은 분야 내 PetaPoco 모델입니다 :

{Umbraco.Extensions.Models.Custom.ObjectsModel.ObjectsDB} _createdOn: {1/1/0001 12:00:00 AM} 
CityMapping: null 
CountryIsoMapping: null 
CreatedOn: {5/19/2017 4:22:16 PM} 
Globalsearch: false 
Id: 0 
InActive: false 
InCache: false 
Name: null 
Object: null 
PlaceId: null ` 

데이터를 삽입하는 것이 작동하는 동일한 dbContext로 작업 중입니다. 여기에 무엇이 누락 되었습니까?

답변

0

내 수업이 문제를 해결 위의 속성 [ExplicitColumns] 제거. 모든 것이 예상대로 작동하지 않습니다. 또한 다른 장식도 효과가 있습니다. 그래서 @Nurhak Kaya는 부분적으로 옳았습니다. 해당 특성을 제거하고 테이블을 삭제 한 후 테이블을 다시 작성/생성합니다.

+0

도움이 되었기 때문에 기쁩니다. 행복한 코딩. –

1

저는 다양한 Umbraco 프로젝트에서 Petapoco를 사용했으며 접근 방식은 접근 방식과 조금 다릅니다. 나는 그것을 여기에서 공유하고있다, 그것이 당신을 돕기를 바란다.

내가 사용한 :( http://nuget.org/List/Packages/PetaPoco을 nuget 패키지)

내 샘플 코드는 아래 또는 in my blog 참조하십시오

[PetaPoco.TableName("fsCarts")] 
[PetaPoco.PrimaryKey("RecordID")] 
public class Cart 
{ 
    [Key] 
    public int RecordId { get; set; } 
    public string CartId { get; set; } 
    public Guid ProductId { get; set; } 
    public int Count { get; set; } 
    public DateTime DateCreated { get; set; } 

} 


UmbracoDatabase con = ApplicationContext.Current.DatabaseContext.Database; 


public void AddToCart(Product product) 
{ 
    try 
    { 
     var cartItem = con.FirstOrDefault<Cart>("SELECT * FROM fsCarts WHERE [email protected] AND [email protected]", ShoppingCardId, product.ProductId); 

     if (cartItem == null) 
     { 
      cartItem = new Cart 
      { 
       ProductId = product.ProductId, 
       CartId = ShoppingCardId, 
       Count = 1, 
       DateCreated = DateTime.Now 
      }; 
      con.Insert("fsCarts", "RecordID", cartItem); 
     } 
     else 
     { 
       cartItem.Count++; 
       con.Update("fsCarts", "RecordID", cartItem); 
      } 
    } 
    catch (Exception ex) 
    { 
     Elmah.ErrorLog.GetDefault(null).Log(new Elmah.Error(new Exception("Shopping Cart AddToCart: " + ex.ToString()))); 
    } 
} 

//////////////////// 

public int RemoveFromCart(int id) 
{ 
    int itemCount = 0; 
    try 
    { 
     var cartItem = con.FirstOrDefault<Cart>("SELECT * FROM fsCarts WHERE [email protected] AND [email protected]", ShoppingCardId, id); 

     if (cartItem != null) 
     { 
      if (cartItem.Count > 1) 
      { 
       cartItem.Count--; 
       itemCount = cartItem.Count; 
       con.Update("fsCarts", "RecordID", cartItem); 
      } 
      else 
      { 
       con.Delete("fsCarts", "RecordID", cartItem); 
       } 
     } 

    } 
    catch (Exception ex) 
    { 
     Elmah.ErrorLog.GetDefault(null).Log(new Elmah.Error(new Exception("Shopping Cart RemoveFromCart: " + ex.ToString()))); 
     } 

    return itemCount; 
} 


//////////////////// 

public List<Cart> GetCartItems() 
{ 
    List<Cart> cartItemList = new List<Cart>(); 
    try 
    { 
     cartItemList = con.Query<Cart>("SELECT * FROM fsCarts WHERE [email protected]", ShoppingCardId).ToList(); 

    } 
    catch (Exception ex) 
    { 
     Elmah.ErrorLog.GetDefault(null).Log(new Elmah.Error(new Exception("Shopping Cart GetCartItems: " + ex.ToString()))); 
    } 
    return cartItemList; 
} 

//////////////////// 

public decimal GetTotal() 
{ 
    decimal? total = null; 
    try 
    { 
     total = con.ExecuteScalar<decimal>("SELECT SUM(ISNULL(p.Price,0)*c.Count) FROM fsCarts c INNER JOIN fsProducts p ON c.ProductID=p.ProductID WHERE [email protected]", ShoppingCardId); 

    } 
    catch (Exception ex) 
    { 
     Elmah.ErrorLog.GetDefault(null).Log(new Elmah.Error(new Exception("Shopping Cart GetTotal: " + ex.ToString()))); 
     } 
    return total ?? decimal.Zero; 
} 
+0

UmbracoDatabase con = ApplicationContext.Current.DatabaseContext.Database; 내 질문 코드에서와 같이 반환합니다 (및 동일합니다). 데이터베이스에서 내 레코드를 받았지만 필드 안의 null 값을 채 웁니다. – RunnicFusion

+0

다른 제안 사항이 있으십니까? – RunnicFusion

+1

그 것처럼 당신이 당신의 테이블 객체가 다른 속성을 가지고있는 것처럼 당신의 연결을 만드는 것이 맞습니다, 당신은 더 적은 속성으로 당신의 테이블 클래스를 생성하고 나는 db로부터 아이템을 선택하는 방법을 시도 할 것을 추천합니다. 내 코드가 작동한다는 것을 확신 할 수 있으므로 코드에서 몇 가지 간단한 변경을 수행하고 작동하는지 확인하십시오. 선택이 작동하는지 확인한 후에 다른 속성을 추가 할 수 있습니다. 자세한 내용은이 부분을 참조하십시오. http://www.toptensoftware.com/petapoco/ –