# PrimaryBasedLogViewAdaptor&lt;TLogView, TLogEntry, TSubmissionEntry&gt;

Package: [Microsoft.Orleans.EventSourcing](/orleans/docs/api/csharp/microsoft.orleans.eventsourcing/) 10.0.0

[NuGet package](https://www.nuget.org/packages/Microsoft.Orleans.EventSourcing) | [Source](https://github.com/dotnet/orleans/blob/e4e752cedecc2976811db49802c7a999b1f1c704/src/Orleans.EventSourcing/Common/PrimaryBasedLogViewAdaptor.cs#L29)

```csharp
public abstract class PrimaryBasedLogViewAdaptor<TLogView, TLogEntry, TSubmissionEntry> : ILogConsistencyDiagnostics, ILogViewAdaptor<TLogView, TLogEntry>, ILogViewRead<TLogView, TLogEntry>, ILogViewUpdate<TLogEntry>
    where TLogView : class, new()
    where TLogEntry : class
    where TSubmissionEntry : Orleans.EventSourcing.Common.SubmissionEntry<TLogEntry>
```

A general template for constructing log view adaptors that are based on a sequentially read and written primary. We use this to construct a variety of different log-consistency providers, all following the same basic pattern (read and write latest view from/to primary, and send notifications after writing). 

Note that the log itself is transient, i.e. not actually saved to storage - only the latest view and some metadata (the log position, and write flags) is stored in the primary. It is safe to interleave calls to this adaptor (using grain scheduler only, of course).

Subclasses override ReadAsync and WriteAsync to read from / write to primary. Calls to the primary are serialized, i.e. never interleave.

## Type parameters

- `TLogEntry`: The type of the log entries
- `TLogView`: The user-defined view of the log
- `TSubmissionEntry`: The type of submission entries stored in pending queue

## Properties

- [ConfirmedVersion](/orleans/docs/api/csharp/microsoft.orleans.eventsourcing/orleans.eventsourcing.common.primarybasedlogviewadaptor-3/properties/confirmedversion-a4a2ad2e/)
- [ConfirmedView](/orleans/docs/api/csharp/microsoft.orleans.eventsourcing/orleans.eventsourcing.common.primarybasedlogviewadaptor-3/properties/confirmedview-70f9a2a5/)
- [TentativeView](/orleans/docs/api/csharp/microsoft.orleans.eventsourcing/orleans.eventsourcing.common.primarybasedlogviewadaptor-3/properties/tentativeview-f51f26fe/)
- [UnconfirmedSuffix](/orleans/docs/api/csharp/microsoft.orleans.eventsourcing/orleans.eventsourcing.common.primarybasedlogviewadaptor-3/properties/unconfirmedsuffix-bdb7f4d0/)

## Methods

- [ClearLogAsync(CancellationToken)](/orleans/docs/api/csharp/microsoft.orleans.eventsourcing/orleans.eventsourcing.common.primarybasedlogviewadaptor-3/methods/clearlogasync-system-threading-cancellationtoken-57cf1480/)
- [ConfirmSubmittedEntries](/orleans/docs/api/csharp/microsoft.orleans.eventsourcing/orleans.eventsourcing.common.primarybasedlogviewadaptor-3/methods/confirmsubmittedentries-32dd52f3/)
- [DisableStatsCollection](/orleans/docs/api/csharp/microsoft.orleans.eventsourcing/orleans.eventsourcing.common.primarybasedlogviewadaptor-3/methods/disablestatscollection-17286960/)
- [EnableStatsCollection](/orleans/docs/api/csharp/microsoft.orleans.eventsourcing/orleans.eventsourcing.common.primarybasedlogviewadaptor-3/methods/enablestatscollection-c19ac120/)
- [GetStats](/orleans/docs/api/csharp/microsoft.orleans.eventsourcing/orleans.eventsourcing.common.primarybasedlogviewadaptor-3/methods/getstats-9bed2289/)
- [OnProtocolMessageReceived(ILogConsistencyProtocolMessage)](/orleans/docs/api/csharp/microsoft.orleans.eventsourcing/orleans.eventsourcing.common.primarybasedlogviewadaptor-3/methods/onprotocolmessagereceived-orleans-eventsourcing-ilogconsistencyprotocolmessage-359df78b/)
- [PostOnActivate](/orleans/docs/api/csharp/microsoft.orleans.eventsourcing/orleans.eventsourcing.common.primarybasedlogviewadaptor-3/methods/postonactivate-9c257f17/)
- [PostOnDeactivate](/orleans/docs/api/csharp/microsoft.orleans.eventsourcing/orleans.eventsourcing.common.primarybasedlogviewadaptor-3/methods/postondeactivate-57591dfc/)
- [PreOnActivate](/orleans/docs/api/csharp/microsoft.orleans.eventsourcing/orleans.eventsourcing.common.primarybasedlogviewadaptor-3/methods/preonactivate-2bbe6c88/)
- [RetrieveLogSegment(int, int)](/orleans/docs/api/csharp/microsoft.orleans.eventsourcing/orleans.eventsourcing.common.primarybasedlogviewadaptor-3/methods/retrievelogsegment-int-int-22303705/)
- [Submit(TLogEntry)](/orleans/docs/api/csharp/microsoft.orleans.eventsourcing/orleans.eventsourcing.common.primarybasedlogviewadaptor-3/methods/submit-tlogentry-67a1f9b3/)
- [SubmitRange(IEnumerable&lt;TLogEntry&gt;)](/orleans/docs/api/csharp/microsoft.orleans.eventsourcing/orleans.eventsourcing.common.primarybasedlogviewadaptor-3/methods/submitrange-system-collections-generic-ienumerable-tlogentry-e4dfc391/)
- [Synchronize](/orleans/docs/api/csharp/microsoft.orleans.eventsourcing/orleans.eventsourcing.common.primarybasedlogviewadaptor-3/methods/synchronize-3a1de632/)
- [TryAppend(TLogEntry)](/orleans/docs/api/csharp/microsoft.orleans.eventsourcing/orleans.eventsourcing.common.primarybasedlogviewadaptor-3/methods/tryappend-tlogentry-915fa657/)
- [TryAppendRange(IEnumerable&lt;TLogEntry&gt;)](/orleans/docs/api/csharp/microsoft.orleans.eventsourcing/orleans.eventsourcing.common.primarybasedlogviewadaptor-3/methods/tryappendrange-system-collections-generic-ienumerable-tlogentry-7364441d/)
