Я сталкиваюсь с круговыми ссылками при использовании sqlite-net extensions
с WCF
. Код ниже будет работать правильно, но у меня нет ссылки от RabbitQueueStat
до RabbitQueue
. Если я раскомментирую строки в RabbitQueueStat
, произойдет что-то не так. Хотя db.GetAllWithChildren<RabbitQueue>().ToList();
даст мне допустимые значения, однако я получаю сообщение об ошибке return queues
.
![enter image description here](https://i.stack.imgur.com/WnYcP.jpg)
Если я установлю точку останова на RabbitQueue
и RabbitQueueStat
, я вижу, что получаю бесконечный цикл. Что я могу с этим сделать?
public class RabbitQueue
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
public string Name { get; set; }
[OneToMany]
public List<RabbitQueueStat> RabbitQueueStats { get; set; }
}
public class RabbitQueueStat
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
public int Ack { get; set; }
[ForeignKey(typeof(RabbitQueue))]
public int RabbitQuqueId { get; set; }
//[ManyToOne]
//public RabbitQueue RabbitQueue { get; set; }
}
public List<RabbitQueue> GetQueues()
{
var db = getConnection();
var queues = db.GetAllWithChildren<RabbitQueue>().ToList();
return queues;
}
public int InsertQueue(string name, string iban)
{
var queue = new RabbitQueue()
{
Name = name,
Iban = iban,
RabbitQueueAverageStats = new List<RabbitQueueAverageStat>(),
RabbitQueueStats = new List<RabbitQueueStat>()
};
var db = getConnection();
var inserted = db.Find<RabbitQueue>(x => x.Name == name && x.Iban == iban);
if (inserted != null)
return inserted.Id;
else
return db.Insert(queue);
}
public void InsertQueueStat(int queueId, int ack)
{
var queueStat = new RabbitQueueStat()
{
Ack = ack,
};
var db = getConnection();
var queue = db.Find<RabbitQueue>(x => x.Id == queueId);
if (queue != null)
{
db.Insert(queueStat);
if (queue.RabbitQueueStats == null)
queue.RabbitQueueStats = new List<RabbitQueueStat>();
queue.RabbitQueueStats.Add(queueStat);
db.UpdateWithChildren(queue);
}
}
Чтобы было понятно:
- После добавления
RabbitQueue
без каких-либо RabbitQueueStat
всего
работает нормально
- После комментирования
public RabbitQueue
RabbitQueue { get; set; }
все работает нормально
- Проблема
появляется, когда мне назначено хотя бы 1
RabbitQueueStat
RabbitQueue
с некомментированными строками в RabbitQueueStat
.