Ert*_*hko 2 sqlite-net-extensions
以下是一些重现问题的示例代码:
客户类
public class Customer
{
private int _id;
[Column("_id"), PrimaryKey, AutoIncrement]
public int Id
{
get { return _id; }
set
{
if (value != _id)
{_id = value;}
}
}
private string _name;
[Column("_name")]
public string Name
{
get { return _name; }
set
{
if (value != _name)
{_name = value;}
}
}
private List<Order> _orders;
[OneToMany(CascadeOperations = CascadeOperation.CascadeInsert | CascadeOperation.CascadeRead | CascadeOperation.CascadeDelete)]
public List<Order> Orders
{
get { return _orders; }
set
{
if (_orders != value)
{
_orders = value;
}
}
}
Run Code Online (Sandbox Code Playgroud)
订单类
public class Order
{
private int _id;
[Column("_id"), PrimaryKey, AutoIncrement]
public int Id
{
get { return _id; }
set
{
if (value != _id)
_id = value;
}
}
private string _name;
[Column("_name")]
public string Name
{
get { return _name; }
set
{
if (value != _name)
_name = value;
}
}
private int _customerId;
[Column("_customerId"), ForeignKey(typeof(Customer))]
public int CustomerId
{
get { return _customerId; }
set
{
if (value != _customerId)
_customerId = value;
}
}
}
Run Code Online (Sandbox Code Playgroud)
数据库操作
Customer customer = new Customer(){Name = "Customer One"};
context.InsertWithChildren(customer, true);
customer.Orders = new List<Order>();
customer.Orders.Add(new Order(){Name="Sample order"});
context.UpdateWithChildren(customer);
// get a new copy from the db
var result = context.GetWithChildren<Customer>(customer.Id,true);
List<Order> orders = result.Orders; // Orders.Count is 0
Run Code Online (Sandbox Code Playgroud)
我在这里做错了什么或UpdateWithChildren应该像这样工作?
编辑
如果DB中不存在UpdateWithChildren新的,Order则看起来不插入新的.首先插入订单,将其分配给客户然后调用UpdateWithChildren建立关系.
Customer customer = new Customer(){Name = "Customer One"};
context.InsertWithChildren(customer, true);
List<Order> newOrders = new List<Order>();
newOrders.Add(new Order(){Name="Test order"});
context.InsertAllWithChildren(newOrders,true);
customer.Orders = newOrders;
context.UpdateWithChildren(customer);
var result = context.GetWithChildren<Customer>(customer.Id,true);
List<Order> orders = result.Orders; // Orders.Count is 1
Run Code Online (Sandbox Code Playgroud)
我认为这是我应该怎么做的?
正如您已经注意到的UpdateWithChildren那样,不会将任何新对象插入数据库.它只是更新关系.如果要插入或更新对象,可以使用InsertOrReplaceWithChildren或首先插入对象,然后更新关系.
或者,您可以使用递归插入操作:
Customer customer = new Customer(){
Name = "Customer One",
Orders = new List<Order>{ new Order(){ Name="Test order" } }
};
// Recursively insert 'customer' and all its orders
context.InsertWithChildren(customer, true);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1552 次 |
| 最近记录: |