Предположим, у меня есть класс ListingEvent
и класс UserAccount
.Servicestack OrmLite удаляет многие из многих
ListingEvent
может иметь много UsersAttending
и UserAccount
может присутствовать много ListingEvents
.
Классы похожи:
public class UserAccount
{
[AutoIncrement]
[PrimaryKey]
public int Id {
get ;
set;
}
public string Name {
get ;
set;
}
public UserAccount()
{
ListingEventsAttending = new List<UserAccountListingEvent>();
}
[Reference]
public List<UserAccountListingEvent> ListingEventsAttending {
get;
set;
}
}
public class UserAccountListingEvent{
[AutoIncrement]
[PrimaryKey]
public int Id {
get;
set;
}
public Model.AttendingStatus Status { get; set; }
[References(typeof(UserAccount))]
public int UserAccountId {
get;
set;
}
[References(typeof(ListingEvent))]
public int ListingEventId {
get;
set;
}
}
public class ListingEvent
{
public ListingEvent()
{
UsersAttending = new List<UserAccountListingEvent>();
}
[AutoIncrement]
[PrimaryKey]
public int Id {
get ;
set;
}
public string Name { get; set; }
[Reference]
public List<UserAccountListingEvent> UsersAttending { get; set; }
public void RemoveUserAttending(UserAccount user)
{
if (user == null)
{
return;
}
UsersAttending.RemoveAll(u => u.UserAccountId == user.Id);
}
}
И я получаю ListingEvent, который имеет мой учетная_запись_пользователя посещение с:
var listingEvent = db.LoadSingleById<Model.ListingEvent> (request.Id);
И я вижу, что пользователь с правильным Id посещает так называют RemoveUserAttending
, чтобы удалить пользователя. Теперь я могу видеть пользователь не посещает, так что я называю:
db.Save (listingEvent, references: true);
Но - теперь, когда я иду, чтобы принести что ListingEvent пользователь вновь возвращается к посещению.
Так что мой вопрос:
- следует выше работы, как ожидалось?
- если нет - как я должен это делать?
Это немного проблема, потому что теперь мне нужно вывести эту логику из своего домена, которая оставит его немного анемичным - как люди справляются с этим? Должен ли я рассматривать oRM, который отслеживает изменения? :/ – iwayneo
OrmLite всегда была неудивительной ORM, которая сохраняет высокое сродство к SQL, т. Е. Вам потребуется очень похожий подход с SQL или любым Micro ORM. Если вы вместо этого восполняете его (т. Е. Не укажете тип [Reference]), то ваш подход будет работать. В противном случае вы можете использовать более тяжелую ORM с отслеживанием изменений, если хотите. – mythz
Cheers - собираешься шипнуть какой-то код - не используется NHibernate в течение долгого времени: p – iwayneo