导航到与从数据库中获取的其他对象相关的 SQLite 对象
Navigate to SQLite object related to an other object, fetched from the database
我正在尝试导航到与其他对象相关的对象。
在这种情况下,有2个class; StockTakeSession 和 Location。这 2 个具有一对一的关系。当每个 class 创建 2 个对象时,我将关系设置为下面的代码。我可以随心所欲地浏览它,没有任何问题。 但是当我从数据库中获取StockTakeSession 时,只有LocationId 有值,而Location 本身为空。为了解决这个问题,我为 StockTakeSession.Location.
创建了扩展的 get 方法
我是 C# 的新手/SQLite/ORM,所以我想知道这是否正是它应该工作的方式,还是我需要使用不同的方法?
感谢任何建议。
罗伯特
这是 2 类:
// These are the Stock Take Sessions
public class StockTakeSession : DomainModels
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
public DateTime DateTime { get; set; }
// Navigation properties
// One to many relationship with StockItems
[OneToMany(CascadeOperations = CascadeOperation.All)]
public List<StockItem> StockItems { get; set; }
// Specify the foreign key to Location
[ForeignKey(typeof(Location))]
public int LocationId { get; set; }
// One to one relationship with Location
private Location location;
[OneToOne]
public Location Location
{
get
{
if (location == null)
{
DataBase db = new DataBase();
Location locationTemp = db.SelectLocation(LocationId);
return locationTemp;
}
else
return location;
}
set
{
location = value;
}
}
}
// These are the Locations where the Stock Take Sessions are done
public class Location : DomainModels, IComparable<Location>
{
[JsonProperty("id"), PrimaryKey]
public int Id { get; set; }
public string Name { get; set; }
public string Street { get; set; }
public int Number { get; set; }
public string Postcode { get; set; }
public string City { get; set; }
public bool Completed { get; set; }
[Ignore]
public string Label
{
get
{
return Name + " - (" + Postcode + ")";
}
}
public int CompareTo(Location other)
{
return Name.CompareTo(other.Name);
}
// Navigation property
// One to many relationship with StockItems
[OneToMany(CascadeOperations = CascadeOperation.All), Ignore]
public List<StockItem> StockItems { get; set; }
// Specify the foreign key to StockTakeSession
[ForeignKey(typeof(StockTakeSession))]
public int StockTakeSessionId { get; set; }
// One to one relationship with StockTakeSession
[OneToOne]
public StockTakeSession StockTakeSession { get; set; }
}
我如何存储对象之间的关系:
StockTakeSession newSession = new StockTakeSession
{
LocationId = selectedLocation.Id,
Location = selectedLocation,
DateTime = DateTime.Now
};
db.Insert(newSession, true);
在 sqlite-net-extensions 中,关系不是按需加载的。您必须在需要时从数据库中获取它们。
将 Location
的实现更改为简单的 getter/setter。
[OneToOne]
public Location Location { get; set; }
然后,在需要时加载会话关系:
db.GetChildren(session);
例如:
db.GetWithChildren<StockTakeSession>(stockId);
将获取具有该 ID 的 StockTakeSession
对象并加载关系并设置反向关系。
我正在尝试导航到与其他对象相关的对象。
在这种情况下,有2个class; StockTakeSession 和 Location。这 2 个具有一对一的关系。当每个 class 创建 2 个对象时,我将关系设置为下面的代码。我可以随心所欲地浏览它,没有任何问题。 但是当我从数据库中获取StockTakeSession 时,只有LocationId 有值,而Location 本身为空。为了解决这个问题,我为 StockTakeSession.Location.
创建了扩展的 get 方法我是 C# 的新手/SQLite/ORM,所以我想知道这是否正是它应该工作的方式,还是我需要使用不同的方法?
感谢任何建议。
罗伯特
这是 2 类:
// These are the Stock Take Sessions
public class StockTakeSession : DomainModels
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
public DateTime DateTime { get; set; }
// Navigation properties
// One to many relationship with StockItems
[OneToMany(CascadeOperations = CascadeOperation.All)]
public List<StockItem> StockItems { get; set; }
// Specify the foreign key to Location
[ForeignKey(typeof(Location))]
public int LocationId { get; set; }
// One to one relationship with Location
private Location location;
[OneToOne]
public Location Location
{
get
{
if (location == null)
{
DataBase db = new DataBase();
Location locationTemp = db.SelectLocation(LocationId);
return locationTemp;
}
else
return location;
}
set
{
location = value;
}
}
}
// These are the Locations where the Stock Take Sessions are done
public class Location : DomainModels, IComparable<Location>
{
[JsonProperty("id"), PrimaryKey]
public int Id { get; set; }
public string Name { get; set; }
public string Street { get; set; }
public int Number { get; set; }
public string Postcode { get; set; }
public string City { get; set; }
public bool Completed { get; set; }
[Ignore]
public string Label
{
get
{
return Name + " - (" + Postcode + ")";
}
}
public int CompareTo(Location other)
{
return Name.CompareTo(other.Name);
}
// Navigation property
// One to many relationship with StockItems
[OneToMany(CascadeOperations = CascadeOperation.All), Ignore]
public List<StockItem> StockItems { get; set; }
// Specify the foreign key to StockTakeSession
[ForeignKey(typeof(StockTakeSession))]
public int StockTakeSessionId { get; set; }
// One to one relationship with StockTakeSession
[OneToOne]
public StockTakeSession StockTakeSession { get; set; }
}
我如何存储对象之间的关系:
StockTakeSession newSession = new StockTakeSession
{
LocationId = selectedLocation.Id,
Location = selectedLocation,
DateTime = DateTime.Now
};
db.Insert(newSession, true);
在 sqlite-net-extensions 中,关系不是按需加载的。您必须在需要时从数据库中获取它们。
将 Location
的实现更改为简单的 getter/setter。
[OneToOne]
public Location Location { get; set; }
然后,在需要时加载会话关系:
db.GetChildren(session);
例如:
db.GetWithChildren<StockTakeSession>(stockId);
将获取具有该 ID 的 StockTakeSession
对象并加载关系并设置反向关系。