Мне кажется, что следующий код неоптимален, и что может быть лучше.Я просто не знаю, как получить ключ без фиксации изменений.
var now = DateTime.Now;
var update = new DAL.ServerStatus
{
Accounts = status.Accounts,
Clients = status.Clients,
Created = now,
ServerStarted = status.ServerStarted,
ServerDateTime = status.ServerDateTime
};
var context = DataContext.GetDataContext();
context.ServerStatus.AddObject(update);
context.SaveChanges();
foreach (var character in characters)
{
var characterUpdate = new DAL.ServerOnlineCharacter
{
Account = character.Account,
Alliance = character.Alliance,
Created = now,
Criminal = character.Criminal,
DonationPoints = character.DonationPoints,
EventCredits = character.EventCredits,
FactionTyped = character.FactionTyped,
FactionPoints = character.FactionPoints,
Fame = character.Fame,
GameTime = character.GameTime,
Guild = character.Guild,
GuildAbbreviation = character.GuildAbbreviation,
GuildTitle = character.GuildTitle,
Karma = character.Karma,
Kills = character.Kills,
MapTyped = character.MapTyped,
RaceTyped = character.RaceTyped,
RawName = character.RawName,
Serial = character.Serial,
ServerStatusId = update.Id
};
context.ServerOnlineCharacters.AddObject(characterUpdate);
}
context.SaveChanges();
В идеале я бы хотел, чтобы это было транзакционным, и мне не приходилось бы дважды обращаться к базе данных, чтобы полностью зафиксировать изменения.Как я мог добиться этого?
Кстати, метод заглушки:
static void Update(IServerStatusUpdate status, IEnumerable<IServerOnlineCharacterUpdate> characters);