2011-06-03 114 views
2

我有以下POCO的:插入到PetaPoco与实体关系

[PetaPoco.TableName("Customer")] 
    [PetaPoco.PrimaryKey("ID")] 
    public class User 
    { 
     [Required(ErrorMessage = "Please enter a Forename")] 
     [PetaPoco.Column("Name")] 
     public string Forename { get; set; } 

    } 

    public class Product 
    { 
     public int Id { get { return 1; } } 
     public string Name { get { return "TBMaster Licence"; } } 
     public decimal Price { get { return 358.00M; } } //Ex VAT 

     [Required(ErrorMessage = "Please enter a valid Machine ID")] 
     public string MachineId { get; set; } 

     public int ExpiryElement { get; set; } 

     public DateTime ExpiryDate 
     { 
      get 
      { 
       if (ExpiryElement == 0) 
       { 
        return new DateTime(1900, 1, 1); 
       } 
       else if (ExpiryElement == 1) 
       { 
        return DateTime.Now.AddYears(1); 
       } 
       else if (ExpiryElement == 2) 
       { 
        return DateTime.Now.AddYears(2); 
       } 
       else if (ExpiryElement == 3) 
       { 
        return DateTime.MaxValue; 
       } 
       else 
       { 
        return new DateTime(1900, 1, 1); 
       } 
      } 
     } 

     public bool BloodTestEnabled { get; set; } 
     public string LicenceKey { get; set; } 

     public SelectList LicenceOptions 
     { 
      get; 
      set; 
     } 
    } 

    [PetaPoco.TableName("Order")] 
    [PetaPoco.PrimaryKey("OrderID")] 
    public class Order 
    { 
     [PetaPoco.Column("TxCode")] 
     public string VendorTxCode { get; set; } 

     public User WebsiteUser { get; set; } 

     public List<Product> Products { get; set; } 
    } 

我有下面的代码,试图做一个插入相应的表格中:

 var user = new User(); 
     user.Forename = "fred"; 

     var product = new Product(); 
     product.ExpiryElement = 2; 
     product.MachineId = "1234"; 

     var order = new Order(); 
     order.VendorTxCode = "1111"; 
     order.WebsiteUser = user; 
     List<Product> prods = new List<Product>(); 
     prods.Add(product); 
     order.Products = prods; 


     var db = new PetaPoco.Database("TBMasterDB"); 

     db.Insert(user); 
     db.Insert(order); 

用户插入工作正常,但订单上的插入没有。当你在POCO的这种关系中,你如何做插入?这是一种简化的方法,因为我在尝试执行插入操作时,我只有订单POCO,因此如何插入用户,订单和产品表中?

回答

3

看着加雷榆树博客post后,我知道我能做到这一点,像这样:

db.Insert("Order", "OrderID", new { TxCode = order.VendorTxCode, CustomerID = order.WebsiteUser.ID }); 

基本上你在插入方法再次映射。不是很漂亮,但它有诀窍。希望有一个更加干净的方式来做到这一点在未来

1

我有一个类似的关系,在我的应用程序,即;一对多。我会手动添加订单记录,所以我有订单ID。在设置order.productid后,分别插入每个产品。至于数据库,如果你还没有设置它,它就像我需要一个OrderProducts表格来存储产品的顺序。您可能不需要在OrderProduct中存储完整的产品详细信息,只需在订单

时的产品编号,说明和金额