Ich versuche, einen Eintrag in eine Tabelle hinzuzufügen und den Primärschlüssel des hinzugefügten Eintrags zu verwenden, um einen zusätzlichen Eintrag in einer anderen Tabelle zu erstellen.Einfügen in mehrere Tabellen mit WCF-Transaktionen
Der Fehler, den ich bekommen habe ist
Der Transaktionsmanager hat seine Unterstützung für die Fern/Netzwerk Transaktionen deaktiviert. (Ausnahme von HRESULT: 0x8004D024)
Ich glaube, dies durch die Schaffung mehrerer Verbindungen innerhalb einer einzelnen Transaction verursacht wird, aber ich tue alles in einem Kontext/Anweisung, so dass ich glaube nicht, dass ich diese Aufnahme werden soll Error.
Dienst
[OperationBehavior(TransactionScopeRequired = true)]
public void CreateGroup(NewGroupData data)
{
var groupRepo = _GroupRepo ?? new InvestigatorGroupRepository();
groupRepo.CreateGroup(data.UserId, data.InvestigatorGroupName, data.HasGameAssignment, data.InstitutionId);
}
Repository
public void CreateGroup(string userId, string investigatorGroupName, bool hasGameAssignment, int institutionId)
{
using (var context = new GameDbContext())
{
var newGroup = new InvestigatorGroup()
{
InvestigatorGroupName = investigatorGroupName,
HasGameAssignment = hasGameAssignment,
InstitutionId = institutionId,
IsTrashed = false
};
int institutionUserId =
context.InstitutionUsers.Where(
iu => !iu.IsTrashed && iu.APUser.UserId == userId && iu.InstitutionId == institutionId).Select(iu => iu.InstitutionUserId).Single();
var newGroupUser = new InvestigatorGroupUser()
{
InstitutionUserId = institutionUserId,
InvestigatorGroup = newGroup,
CreationDate = DateTime.Now
};
context.InvestigatorGroupUsers.Add(newGroupUser);
context.SaveChanges();
}
}
Danke für den Hinweis! Ich habe die Änderungen vorgenommen, die Sie gesagt haben, aber ich bekomme immer noch den gleichen Fehler (siehe meine aktualisierte Frage). Ich habe den transactionscope behalten, weil, wenn die Einfügung zu InvestigatorGroupUser ausfällt, ich die Einfügung in InvestigatorGroup ebenso scheitern lassen möchte –
Der Punkt ist, dass Sie das TransactionScope nicht benötigen. 'SaveChanges' tut * alles fügt * in einer einzigen Transaktion ein, die es startet und festlegt. –
Während @GertArnold korrekt ist und die Transaktion in diesem Fall unnötig ist, glaube ich http: // stackoverflow.com/questions/10130767/Die Transaktion-Manager-hat-deaktiviert-seine-Unterstützung-für-Remote-Netzwerk-Transaktionen wird erläutert, wie Sie diesen Fehler beheben, wenn Sie es in einem Kontext, wo dies erforderlich ist. – dman2306