Вставка в PetaPoco с отношениями сущностей - PullRequest
2 голосов
/ 04 июня 2011

У меня есть следующие POCO:

[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 заказа, так как я могу вставить в таблицу user, order и products?

Ответы [ 2 ]

3 голосов
/ 04 июня 2011

После просмотра блога Гарета Элмса post я вижу, что могу сделать это так:

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

По сути, вы снова отображаете в методе InsertНе очень красиво, но это делает свое дело.Надеюсь, что в будущем есть более аккуратный способ сделать это

1 голос
/ 04 июня 2011

У меня есть похожие отношения в моем приложении, т.е.один ко многим.Сначала я бы добавил запись заказа вручную, чтобы у меня был идентификатор заказа.Затем вставьте каждый продукт индивидуально после настройки order.productid.Что касается базы данных, если вы еще не настроили ее как таковую, мне кажется, что вам нужна таблица OrderProducts, в которой продукты хранятся в заказе.Вам, вероятно, не нужно хранить всю информацию о продукте в OrderProduct, только идентификатор продукта, описание и сумму на момент заказа

...