Да, но вы должны явно объявить внешние ключи и обратные свойства в атрибуте взаимосвязей, потому что иначе библиотека может получить неправильный внешний ключ для отношения.
public class ClassA
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
[OneToMany("O2MClassAKey", "BObjectsInverse")]
public List<ClassB> BObjects { get; set; }
[OneToOne("O2OClassAKey", "BObjectInverse")]
public ClassB BObject { get; set; }
// Other properties
public string Bar { get; set; }
}
public class ClassB
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
[ForeignKey(typeof (ClassA))]
public int O2MClassAKey { get; set; }
[ForeignKey(typeof (ClassA))]
public int O2OClassAKey { get; set; }
// Inverse relationships, these are optional
[ManyToOne("O2MClassAKey", "BObjects")]
public ClassA BObjectsInverse { get; set; }
[OneToOne("O2OClassAKey", "BObject")]
public ClassA BObjectInverse { get; set; }
// Other properties
public string Foo { get; set; }
}
Пожалуйста, обратите внимание, что внешний ключ O2OClassAKey
для OneToOne
отношений может быть объявлен в любом из классов.
Если вам не нужны обратные свойства, вы можете пропустить их в атрибуте отношений:
public class ClassA
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
[OneToMany("O2MClassAKey")]
public List<ClassB> BObjects { get; set; }
[OneToOne("O2OClassAKey")]
public ClassB BObject { get; set; }
// Other properties
public string Bar { get; set; }
}
public class ClassB
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
[ForeignKey(typeof (ClassA))]
public int O2MClassAKey { get; set; }
[ForeignKey(typeof (ClassA))]
public int O2OClassAKey { get; set; }
// Other properties
public string Foo { get; set; }
}
Спасибо за ваш ответ @ redent84, это именно то, что я искал. Я просто не очень уверен в том, что вы подразумеваете под «внешним ключом для oneToMany отношения могут быть объявлены в любом из классов». – markusian
К сожалению, это была опечатка. Я хотел сказать свойство «OneToOne». Внешний ключ отношения «один к одному» может быть в любом из двух концов. – redent84