2012-11-09 172 views
1

我是PetaPoco的新手,最初我喜歡它,但後來撞到了牆上,我根本不知道如何搜索。 我有一個對象,需要在其屬性之一中設置屬性,即Job.Min.BaseValue。這些數據的來源是「min_mb」。 所以基本上我的對象不是源表的直接映射屬性中的PetaPoco映射屬性

public class Usage 
{ 
    public Decimal BaseValue {get;set;} 
    public Decimal BaseScale {get;set;} 
    public Decimal BaseUnit {get;set;} 
} 

[PetaPoco.TableName("data")] 
[PetaPoco.PrimaryKey("date, client_name")] 
[PetaPoco.ExplicitColumns] 
public class Job 
{ 
    [PetaPoco.Column("date")] 
    public DateTime Date {get;set;} 
    [PetaPoco.Column("client_name")] 
    public String ClientName {get;set;} 

    public Usage Min {get;set;} 

    public CommvaultJob() { Min = new Usage() { BaseScale=1024, BaseUnit="MB" }; } 
} 
+1

你試圖映射的表格結構是什麼?你有另外一張桌子嗎? –

+0

沒有表是扁平的,列是{client_name,date,min_mb},沒有加入 –

回答

0

如果你的對象不與表結構圖,一個ORM可以幫助不大。

您將需要手動執行映射或製作複製其他字段的值的新陰影屬性,但這種增加的複雜性將無法實現ORM的目的。

+0

我應該是特定的;數據確實直接映射,但不包含簡單類型(int,string等)。我希望能夠使用列或列的集合來填充屬性。即如果我在.NET中使用Unit類,它有一個單元類型和值,它可能存儲在數據庫中的兩個單獨的列中。有沒有辦法解決這個問題? –

+0

如果你有一個'Unit'表,那麼這通常可以很好地工作,所以你可以映射對象 –

1

我想你在調用Fetch或Query時只是錯過了額外的類型。這爲我工作:

調用PetaPoco:

var allData = _db.Fetch<TestJobPoco,Usage>("select * from dataTEST"); 
return View(allData); 

的波蘇斯:

[PetaPoco.ExplicitColumns] 
public class Usage 
{ 
    public Usage() 
    { 
     BaseScale=1024; 
     BaseUnit="MB"; 
    } 

    [PetaPoco.Column("base_value")] 
    public Decimal BaseValue {get;set;} 

    [PetaPoco.Ignore] 
    public Decimal BaseScale {get;set;} 

    [PetaPoco.Ignore] 
    public string BaseUnit {get;set;} 
} 

[PetaPoco.TableName("dataTEST")] 
[PetaPoco.PrimaryKey("id")] 
[PetaPoco.ExplicitColumns] 
public class TestJobPoco 
{ 
    [PetaPoco.Column("id")] 
    public int Id {get;set;} 

    [PetaPoco.Column("date")] 
    public DateTime Date {get;set;} 

    [PetaPoco.Column("client_name")] 
    public String ClientName {get;set;} 

    public Usage Min {get;set;} 

    public TestJobPoco() 
    { 
     //Min = new Usage() { BaseScale=1024, BaseUnit="MB" }; 
    } 
} 

我的測試數據庫都有一個ID,日期,CLIENT_NAME和BASE_VALUE列。主鍵是id,所以它與你的略有不同,但這不應該改變poco映射的方式。