Servicestack ORMLite更新子集合

时间:2014-10-07 10:43:55

标签: servicestack ormlite-servicestack

我可以看到你可以在ORMLite中做这样的事情:

var customer =  new Customer {
    Name = "Customer 1",
    PrimaryAddress = new CustomerAddress {
        AddressLine1 = "1 Australia Street",
        Country = "Australia"
    },
    Orders = new[] {
        new Order { LineItem = "Line 1", Qty = 1, Cost = 1.99m },
        new Order { LineItem = "Line 2", Qty = 2, Cost = 2.99m },
    }.ToList(),
};

db.Save(customer, references:true);

但是更新子集合呢?

这是怎么做到的?

要扩展这一点。

我有一个UserAccount类和UserAccount内部的Image类:

public class UserAccount 
{
    [AutoIncrement]
    public int Id {
        get ;
        set;
    }

    public UserAccount()
    {
        Images = new List<UserImage>();
    }

    public List<UserImage> Images { get; protected set; }

    public UserImage Image { get; set; }

    public class UserImage
    {
        public UserImage()
        {
            Created = DateTime.Now;
        }

        public UserImage(string name)
        {
            Value = name;
            Created = DateTime.Now;
        }

        public string Value { get; set; }
    }
}

这样做:

var fullImage = new UserAccount.UserImage(newImageUrl);
fullImage.IsDefault = true;
user.Image = fullImage;
db.Update (fullImage);

不起作用。

这样做:

var fullImage = new UserAccount.UserImage(newImageUrl);
fullImage.IsDefault = true;
user.Images.Add(fullImage);
db.Update (fullImage);

不起作用......

同样做同样但是将图像作为一个单独的实体,它有自己的ID和父类的设置参考不起作用?

1 个答案:

答案 0 :(得分:0)

我认为这是方法:

var image = new UserImage(newImageUrl);
image.IsDefault = true;
db.Save (image);

var images = user.Images;
images.Add (image);

db.Update (new UserAccount{Id = user.Id, Image = image, Images = images});

我希望我错了,因为那太丑了:/

[UPDATE]

我现在看起来像这样更好:

db.UpdateOnly (user, 
    onlyFields: a=> new { a.Image, a.Images}, 
    where: ua => ua.Id == user.Id);
相关问题