我使用ORMLite作为我的ORM,我使用的是以下包含外键关系的结构:
public class Order
{
[AutoIncrement]
public int Id { get; set; }
[Reference]
public Item Item { get; set; }
public string ProUserId { get; set; }
public string Details { get; set; }
}
public class Item
{
[AutoIncrement]
public int Id { get; set; }
public string Description { get; set; }
}
我们可以看到Order包含对Item的引用。在DB Order表中有一个名为ItemId的外键,我在设计视图中使用[Reference]属性注释了该键。
我正在尝试使用以下代码保存订单:
var order = new Order
{
Item = new Item
{
Id = 3,
Description = "Something"
},
ProUserId = "kunal@kunal.com",
Details = "fdfsdfsd"
};
Db.Save(order,references:true);
我希望ORMLite会在Order表中获取关系和ItemID,但它没有,而是确实抛出了以下错误:
Cannot insert the value NULL into column 'ItemId', table 'WebApp.dbo.Order'; column does not allow nulls. INSERT fails.
我尝试更改我的架构并在我的Item表中添加OrderId列并引用它,并且工作正常。但这不是正确的设计。我应该在代码/架构中进行任何更改以支持此功能吗?
答案 0 :(得分:2)
您仍需要提供OrmLite可用于存储关系的外键,例如在Child / ForeignKey表上:
public class Order
{
[AutoIncrement]
public int Id { get; set; }
[Reference]
public Item Item { get; set; }
public string ProUserId { get; set; }
public string Details { get; set; }
}
public class Item
{
[AutoIncrement]
public int Id { get; set; }
public int OrderId { get; set; } //Parent Table PK
public string Description { get; set; }
}
或 1:1 关系,可以在父表上,例如:
public class Order
{
[AutoIncrement]
public int Id { get; set; }
[Reference]
public Item Item { get; set; }
public int ItemId { get; set; } //Child Table PK
public string ProUserId { get; set; }
public string Details { get; set; }
}
public class Item
{
[AutoIncrement]
public int Id { get; set; }
public string Description { get; set; }
}