Skip to content
Browse files

Upgrade to Mongo C# Driver 1.6, added features to ConnectionDialog, R…

…efresh now re-scans DBs.

Signed-off-by: Gordon Burgett <gordon.burgett@gmail.com>
  • Loading branch information...
1 parent fca4234 commit a2c59f9553e91197cbb8d2a73b1c58e3b7994ab2 @gburgett committed Sep 20, 2012
View
6 DriverTests/ConnectionPropertiesEqualityTests.cs
@@ -108,6 +108,9 @@ public void AssemblyLocationsSameValues_Equal()
};
Assert.IsTrue(object.Equals(props1, props2));
+ var hash1 = props1.GetHashCode();
+ var hash2 = props2.GetHashCode();
+ Assert.AreEqual(hash1, hash2);
}
@@ -238,6 +241,9 @@ public void CollectionTypeMappings_MappingsEqual_Equal()
};
Assert.IsTrue(object.Equals(props1, props2));
+ var hash1 = props1.GetHashCode();
+ var hash2 = props2.GetHashCode();
+ Assert.AreEqual(hash1, hash2);
}
}
}
View
BIN LinqPad Mongo Driver.suo
Binary file not shown.
View
43 LinqPad Mongo Driver/Connection Dialog/ConnectionDialog.Designer.cs
@@ -28,9 +28,14 @@ protected override void Dispose(bool disposing)
/// </summary>
private void InitializeComponent()
{
+ this.components = new System.ComponentModel.Container();
this.txtConnectionString = new System.Windows.Forms.TextBox();
this.lblConnectionString = new System.Windows.Forms.Label();
this.dgCollectionTypes = new System.Windows.Forms.DataGridView();
+ this.cmsCollectionTypes = new System.Windows.Forms.ContextMenuStrip(this.components);
+ this.addToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.deleteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.clearTypeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.btnConnect = new System.Windows.Forms.Button();
this.cbDatabases = new System.Windows.Forms.ComboBox();
this.lblDb = new System.Windows.Forms.Label();
@@ -70,6 +75,7 @@ private void InitializeComponent()
this.loadQueryToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.createShellQueryToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
((System.ComponentModel.ISupportInitialize)(this.dgCollectionTypes)).BeginInit();
+ this.cmsCollectionTypes.SuspendLayout();
this.tableLayoutPanel1.SuspendLayout();
this.panel1.SuspendLayout();
this.panel2.SuspendLayout();
@@ -98,12 +104,44 @@ private void InitializeComponent()
//
this.dgCollectionTypes.AllowDrop = true;
this.dgCollectionTypes.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+ this.dgCollectionTypes.ContextMenuStrip = this.cmsCollectionTypes;
this.dgCollectionTypes.Dock = System.Windows.Forms.DockStyle.Fill;
this.dgCollectionTypes.Location = new System.Drawing.Point(3, 191);
this.dgCollectionTypes.Name = "dgCollectionTypes";
this.tableLayoutPanel1.SetRowSpan(this.dgCollectionTypes, 2);
this.dgCollectionTypes.Size = new System.Drawing.Size(410, 384);
this.dgCollectionTypes.TabIndex = 6;
+ this.dgCollectionTypes.MouseDown += new System.Windows.Forms.MouseEventHandler(this.dgCollectionTypes_MouseDown);
+ //
+ // cmsCollectionTypes
+ //
+ this.cmsCollectionTypes.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.addToolStripMenuItem,
+ this.deleteToolStripMenuItem,
+ this.clearTypeToolStripMenuItem});
+ this.cmsCollectionTypes.Name = "cmsCollectionTypes";
+ this.cmsCollectionTypes.Size = new System.Drawing.Size(131, 70);
+ //
+ // addToolStripMenuItem
+ //
+ this.addToolStripMenuItem.Name = "addToolStripMenuItem";
+ this.addToolStripMenuItem.Size = new System.Drawing.Size(130, 22);
+ this.addToolStripMenuItem.Text = "Add";
+ this.addToolStripMenuItem.Click += new System.EventHandler(this.cmsCollectionTypes_Add_Click);
+ //
+ // deleteToolStripMenuItem
+ //
+ this.deleteToolStripMenuItem.Name = "deleteToolStripMenuItem";
+ this.deleteToolStripMenuItem.Size = new System.Drawing.Size(130, 22);
+ this.deleteToolStripMenuItem.Text = "Delete";
+ this.deleteToolStripMenuItem.Click += new System.EventHandler(this.cmsCollectionTypes_Delete_Click);
+ //
+ // clearTypeToolStripMenuItem
+ //
+ this.clearTypeToolStripMenuItem.Name = "clearTypeToolStripMenuItem";
+ this.clearTypeToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
+ this.clearTypeToolStripMenuItem.Text = "Clear Type";
+ this.clearTypeToolStripMenuItem.Click += new System.EventHandler(this.cmsCollectionTypes_ClearType_Click);
//
// btnConnect
//
@@ -501,6 +539,7 @@ private void InitializeComponent()
this.Text = "ConnectionDialog";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.ConnectionDialog_FormClosing);
((System.ComponentModel.ISupportInitialize)(this.dgCollectionTypes)).EndInit();
+ this.cmsCollectionTypes.ResumeLayout(false);
this.tableLayoutPanel1.ResumeLayout(false);
this.panel1.ResumeLayout(false);
this.panel1.PerformLayout();
@@ -559,5 +598,9 @@ private void InitializeComponent()
private System.Windows.Forms.ToolStripMenuItem removeToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem viewToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem reloadFromDiskToolStripMenuItem;
+ private System.Windows.Forms.ContextMenuStrip cmsCollectionTypes;
+ private System.Windows.Forms.ToolStripMenuItem addToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem deleteToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem clearTypeToolStripMenuItem;
}
}
View
175 LinqPad Mongo Driver/Connection Dialog/ConnectionDialog.cs
@@ -33,7 +33,7 @@ public partial class ConnectionDialog : Form
private readonly Func<string, Assembly> loadSafely;
- private Dictionary<string, List<CollectionTypeMapping>> mDatabases = new Dictionary<string, List<CollectionTypeMapping>>();
+ private Dictionary<string, HashSet<CollectionTypeMapping>> mDatabases = new Dictionary<string, HashSet<CollectionTypeMapping>>();
private readonly IXElementSerializer<ConnectionProperties> connectionPropertiesSerializer = new ConnectionPropertiesSerializer();
@@ -66,76 +66,27 @@ public void LoadTypes()
var mongo = MongoServer.Create(connString);
try
{
- HashSet<string> seenDBs = new HashSet<string>();
-
- //Load up each database by name, retrieving the current collection mappings.
- foreach (string name in mongo.GetDatabaseNames())
- {
- seenDBs.Add(name);
-
- List<CollectionTypeMapping> mappings = null;
- if (!this.mDatabases.TryGetValue(name, out mappings))
- {
- mappings = new List<CollectionTypeMapping>();
- this.mDatabases[name] = mappings;
- }
-
- var mappingLookup = mappings.ToDictionary(x => x.CollectionName);
- HashSet<string> seenCollections = new HashSet<string>();
-
- MongoDatabase db = mongo.GetDatabase(name);
- foreach (string collectionName in db.GetCollectionNames())
- {
- seenCollections.Add(collectionName);
-
- CollectionTypeMapping mapping = null;
- if (!mappingLookup.TryGetValue(collectionName, out mapping))
- {
- mapping = new CollectionTypeMapping
- {
- CollectionName = collectionName
- };
- mappings.Add(mapping);
- }
-
- ////wastes DB hits for most of our usage.
- //if (mapping.CollectionType == null)
- //{
- // //see if we can't figure out the type for the collection
- // Type t = TryGetTypeForCollection(db, collectionName, typeLookup);
- // if (t != null)
- // {
- // mapping.CollectionType = t.ToString();
- // }
-
- //}
- }
-
- //trim collections that don't exist in the DB
- for(int i = mappings.Count - 1; i >= 0; i--)
- {
- if(!seenCollections.Contains(mappings[i].CollectionName))
- mappings.RemoveAt(i);
- }
- }
-
- //trim all DB's that don't exist in the connection
- foreach (string dbName in this.mDatabases.Keys.ToArray())
- {
- if (!seenDBs.Contains(dbName))
- this.mDatabases.Remove(dbName);
- }
+ mongo.TrimDatabaseMappings(this.mDatabases);
}
finally
{
mongo.Disconnect();
}
+ string selectedDb = (string)this.cbDatabases.SelectedItem;
this.cbDatabases.Items.Clear();
this.cbDatabases.Items.AddRange(this.mDatabases.Keys.Cast<object>().ToArray());
- this.cbDatabases.SelectedItem = this.mDatabases.Keys.FirstOrDefault();
+ if(selectedDb != null && this.mDatabases.ContainsKey(selectedDb))
+ {
+ this.cbDatabases.SelectedItem = selectedDb;
+ }
+ else
+ {
+ this.cbDatabases.SelectedItem = this.mDatabases.Keys.FirstOrDefault();
+ }
+
if (this.cbDatabases.SelectedItem != null)
- this.dgCollectionTypes.DataSource = this.mDatabases[(string)this.cbDatabases.SelectedItem].Select(m => new TypeMappingWrapper(this, m)).ToList();
+ this.dgCollectionTypes.DataSource = this.mDatabases[(string)this.cbDatabases.SelectedItem].Select(m => new TypeMappingWrapper(m)).ToList();
else
this.dgCollectionTypes.DataSource = null;
}
@@ -290,7 +241,7 @@ private void btnRemoveSerializers_Click(object sender, EventArgs e)
private void cbDatabases_SelectedValueChanged(object sender, EventArgs e)
{
if (this.cbDatabases.SelectedItem != null)
- this.dgCollectionTypes.DataSource = this.mDatabases[(string)this.cbDatabases.SelectedItem].Select(m => new TypeMappingWrapper(this, m)).ToList();
+ this.dgCollectionTypes.DataSource = this.mDatabases[(string)this.cbDatabases.SelectedItem].Select(m => new TypeMappingWrapper(m)).ToList();
else
this.dgCollectionTypes.DataSource = null;
}
@@ -715,7 +666,7 @@ private void LoadFrom(ConnectionProperties props)
{
return ass.GetExportedTypes();
}
- catch (Exception ex)
+ catch (Exception)
{
badAssemblies.Add(ass);
return Enumerable.Empty<Type>();
@@ -726,18 +677,18 @@ private void LoadFrom(ConnectionProperties props)
var key = this.LoadedAssemblies.First(x => x.Value == badAssembly).Key;
this.LoadedAssemblies[key] = null;
}
- this.mDatabases = new Dictionary<string, List<CollectionTypeMapping>>();
+ this.mDatabases = new Dictionary<string, HashSet<CollectionTypeMapping>>();
foreach (var pair in props.CollectionTypeMappings)
{
- this.mDatabases[pair.Key] = pair.Value.ToList();
+ this.mDatabases[pair.Key] = new HashSet<CollectionTypeMapping>(pair.Value);
}
this.cbDatabases.Items.Clear();
this.cbDatabases.Items.AddRange(this.mDatabases.Keys.Cast<object>().ToArray());
string db = this.mDatabases.Keys.FirstOrDefault();
this.cbDatabases.SelectedItem = db;
if (db != null)
- this.dgCollectionTypes.DataSource = this.mDatabases[db].Select(m => new TypeMappingWrapper(this, m)).ToList();
+ this.dgCollectionTypes.DataSource = this.mDatabases[db].Select(m => new TypeMappingWrapper(m)).ToList();
else
this.dgCollectionTypes.DataSource = null;
if(props.SelectedDatabase != null)
@@ -905,11 +856,11 @@ public static TreeNode[] MakeTree(IEnumerable<Type> typeNames)
/// <summary>
/// Data wrapper for the Collection type mappings to control view formatting
/// </summary>
- public class TypeMappingWrapper
+ public class TypeMappingWrapper : IEquatable<TypeMappingWrapper>
{
private CollectionTypeMapping mData;
- public TypeMappingWrapper(ConnectionDialog dialog, CollectionTypeMapping data)
+ public TypeMappingWrapper(CollectionTypeMapping data)
{
this.mData = data;
}
@@ -958,6 +909,31 @@ public string CollectionType
//}
}
+
+ internal CollectionTypeMapping GetUnderlyingData()
+ {
+ return mData;
+ }
+
+ public bool Equals(TypeMappingWrapper other)
+ {
+ if (ReferenceEquals(null, other)) return false;
+ if (ReferenceEquals(this, other)) return true;
+ return Equals(other.mData, mData);
+ }
+
+ public override bool Equals(object obj)
+ {
+ if (ReferenceEquals(null, obj)) return false;
+ if (ReferenceEquals(this, obj)) return true;
+ if (obj.GetType() != typeof (TypeMappingWrapper)) return false;
+ return Equals((TypeMappingWrapper) obj);
+ }
+
+ public override int GetHashCode()
+ {
+ return (mData != null ? mData.GetHashCode() : 0);
+ }
}
/// <summary>
@@ -1001,6 +977,67 @@ public override string ToString()
}
}
+ private void cmsCollectionTypes_ClearType_Click(object sender, EventArgs e)
+ {
+ foreach (var selectedRow in this.dgCollectionTypes.SelectedCells.Cast<DataGridViewCell>().Select(x => x.OwningRow).Distinct())
+ {
+ ((TypeMappingWrapper)selectedRow.DataBoundItem).CollectionType = null;
+ }
+ }
+
+ private void cmsCollectionTypes_Delete_Click(object sender, EventArgs e)
+ {
+ if (this.cbDatabases.SelectedItem != null)
+ {
+ var selectedWrappers = new HashSet<TypeMappingWrapper>(
+ this.dgCollectionTypes.SelectedCells.Cast<DataGridViewCell>().Select(x => x.OwningRow.DataBoundItem).Cast<TypeMappingWrapper>()
+ );
+ this.mDatabases[(string)this.cbDatabases.SelectedItem]
+ .RemoveWhere(ctm => selectedWrappers.Contains(new TypeMappingWrapper(ctm)));
+
+ var list = this.mDatabases[(string)this.cbDatabases.SelectedItem]
+ .Select(m => new TypeMappingWrapper(m)).ToList();
+
+ this.dgCollectionTypes.DataSource = list;
+
+ this.dgCollectionTypes.ClearSelection();
+ }
+ else
+ {
+ MessageBox.Show("Cannot remove a row when no database is selected", "Error", MessageBoxButtons.OK);
+ }
+ }
+
+ private void cmsCollectionTypes_Add_Click(object sender, EventArgs e)
+ {
+ if (this.cbDatabases.SelectedItem != null)
+ {
+ this.mDatabases[(string)this.cbDatabases.SelectedItem].Add(new CollectionTypeMapping());
+
+ var list = this.mDatabases[(string)this.cbDatabases.SelectedItem]
+ .Select(m => new TypeMappingWrapper(m)).ToList();
+ this.dgCollectionTypes.DataSource = list;
+ int lastRow = this.dgCollectionTypes.Rows.GetLastRow(DataGridViewElementStates.Visible);
+
+ this.dgCollectionTypes.ClearSelection();
+ this.dgCollectionTypes.Rows[lastRow].Cells.OfType<DataGridViewCell>().First().Selected = true;
+ }
+ else
+ {
+ MessageBox.Show("Cannot add a row when no database is selected", "Error", MessageBoxButtons.OK);
+ }
+ }
+
+ private void dgCollectionTypes_MouseDown(object sender, MouseEventArgs e)
+ {
+ if (e.Button == MouseButtons.Right)
+ {
+ var hti = this.dgCollectionTypes.HitTest(e.X, e.Y);
+ this.dgCollectionTypes.ClearSelection();
+ this.dgCollectionTypes.Rows[hti.RowIndex].Selected = true;
+ }
+ }
+
}
View
3 LinqPad Mongo Driver/Connection Dialog/ConnectionDialog.resx
@@ -117,6 +117,9 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
+ <metadata name="cmsCollectionTypes.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <value>237, 17</value>
+ </metadata>
<metadata name="menuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>122, 17</value>
</metadata>
View
65 LinqPad Mongo Driver/ConnectionPropertiesExtensions.cs
@@ -0,0 +1,65 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using MongoDB.Driver;
+
+namespace GDSX.Externals.LinqPad.Driver
+{
+ internal static class ConnectionPropertiesExtensions
+ {
+ /// <summary>
+ /// Connects to the given Mongo server and trims the list of databases and collections based
+ /// on what collections actually exist currently in the DB.
+ /// </summary>
+ /// <param name="mongo">The MongoServer instance to connect to.</param>
+ /// <param name="dbMappings">The list of existing DB mappings.</param>
+ public static void TrimDatabaseMappings(this MongoServer mongo, Dictionary<String, HashSet<CollectionTypeMapping>> dbMappings)
+ {
+ HashSet<string> seenDBs = new HashSet<string>();
+
+ //Load up each database by name, retrieving the current collection mappings.
+ foreach (string name in mongo.GetDatabaseNames())
+ {
+ seenDBs.Add(name);
+
+ HashSet<CollectionTypeMapping> mappings = null;
+ if (!dbMappings.TryGetValue(name, out mappings))
+ {
+ mappings = new HashSet<CollectionTypeMapping>();
+ dbMappings[name] = mappings;
+ }
+
+ var mappingLookup = mappings.ToDictionary(x => x.CollectionName);
+ HashSet<string> seenCollections = new HashSet<string>();
+
+ MongoDatabase db = mongo.GetDatabase(name);
+ foreach (string collectionName in db.GetCollectionNames())
+ {
+ seenCollections.Add(collectionName);
+
+ CollectionTypeMapping mapping = null;
+ if (!mappingLookup.TryGetValue(collectionName, out mapping))
+ {
+ mapping = new CollectionTypeMapping
+ {
+ CollectionName = collectionName
+ };
+ mappings.Add(mapping);
+ }
+ }
+
+ //trim collections that don't exist in the DB
+ mappings.RemoveWhere(x => !seenCollections.Contains(x.CollectionName));
+ }
+
+ //trim all DB's that don't exist in the connection
+ foreach (string dbName in dbMappings.Keys.ToArray())
+ {
+ if (!seenDBs.Contains(dbName))
+ dbMappings.Remove(dbName);
+ }
+ }
+
+ }
+}
View
6 LinqPad Mongo Driver/InterceptorCollection.cs
@@ -139,11 +139,11 @@ public static bool HasChanged<T>(T o, BsonDocument originalDoc)
/// <returns></returns>
public static object GetId(object item)
{
- var serializer = BsonSerializer.LookupSerializer(item.GetType());
+ var idProvider = BsonSerializer.LookupSerializer(item.GetType()) as IBsonIdProvider;
object id;
Type idNominalType;
IIdGenerator idGenerator;
- if (serializer.GetDocumentId(item, out id, out idNominalType, out idGenerator))
+ if (idProvider != null && idProvider.GetDocumentId(item, out id, out idNominalType, out idGenerator))
{
return id;
}
@@ -285,7 +285,7 @@ public override SafeModeResult Save(Type nominalType, object document, MongoInse
private class MongoCursorInterceptor<T> : MongoCursor<T>
{
private Action<object> TryRemember;
- public MongoCursorInterceptor(MongoCursor<T> cursor, Action<object> TryRemember) : base(cursor.Collection, cursor.Query)
+ public MongoCursorInterceptor(MongoCursor<T> cursor, Action<object> TryRemember) : base(cursor.Collection, cursor.Query, cursor.ReadPreference)
{
this.TryRemember = TryRemember;
}
View
10 LinqPad Mongo Driver/LinqPad Mongo Driver.csproj
@@ -105,6 +105,7 @@
<DependentUpon>SingleTypeSelector.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="InterceptorCollection.cs" />
+ <Compile Include="ConnectionPropertiesExtensions.cs" />
<Compile Include="LinqPadQuery.cs" />
<Compile Include="MongoDynamicDataContextDriver.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
@@ -124,6 +125,15 @@
<Content Include="header.xml">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
+ <None Include="lib\LINQPad.exe" />
+ <None Include="lib\MongoDB.Bson.dll" />
+ <None Include="lib\MongoDB.Bson.pdb" />
+ <None Include="lib\MongoDB.Bson.XML" />
+ <None Include="lib\MongoDB.Driver.dll" />
+ <None Include="lib\MongoDB.Driver.pdb" />
+ <None Include="lib\MongoDB.Driver.XML" />
+ <None Include="lib\Moq.dll" />
+ <None Include="lib\Moq.pdb" />
</ItemGroup>
<ItemGroup>
<Folder Include="Properties\DataSources\" />
View
22 LinqPad Mongo Driver/MongoDynamicDataContextDriver.cs
@@ -127,6 +127,19 @@ public override List<ExplorerItem> GetSchemaAndBuildAssembly(IConnectionInfo cxI
props.InitializationQuery = LinqPadQuery.CreateFrom(props.InitializationQuery.Location);
}
+ //refresh DB collections
+ MongoServer mongo = null;
+ try
+ {
+ mongo = MongoServer.Create(props.ConnectionString);
+ mongo.TrimDatabaseMappings(props.CollectionTypeMappings);
+ }
+ finally
+ {
+ if(mongo != null)
+ mongo.Disconnect();
+ }
+
var code = new[] { GenerateDynamicCode(props, assemblies, nameSpace, typeName) }
.Concat(GetStaticCodeFiles());
//write inner class CustomInitQuery
@@ -594,6 +607,8 @@ public static IEnumerable<string> GetNamespacesToAdd(ConnectionProperties props
return ret.Distinct();
}
+ private static bool mSerializersAlreadyRegistered = false;
+
/// <summary>
/// Initializes the driver after it has been instantiated.
/// </summary>
@@ -622,7 +637,7 @@ public override void InitializeContext(IConnectionInfo cxInfo, object context, Q
- if(props.CustomSerializers != null)
+ if(!mSerializersAlreadyRegistered && props.CustomSerializers != null)
{
List<Assembly> assemblies =
props.AssemblyLocations.Select(LoadAssemblySafely).ToList();
@@ -637,6 +652,8 @@ public override void InitializeContext(IConnectionInfo cxInfo, object context, Q
BsonSerializer.RegisterSerializer(type, (IBsonSerializer)Activator.CreateInstance(serializer));
}
+
+ mSerializersAlreadyRegistered = true;
}
if (props.AdditionalOptions.BlanketIgnoreExtraElements)
@@ -646,6 +663,9 @@ public override void InitializeContext(IConnectionInfo cxInfo, object context, Q
BsonClassMap.RegisterConventions(conventions, t => true);
}
+
+ //set as default
+ MongoDB.Bson.IO.JsonWriterSettings.Defaults.Indent = true;
}
/*
View
13,948 LinqPad Mongo Driver/lib/MongoDB.Bson.XML
13,948 additions, 0 deletions not shown because the diff is too large. Please use a local Git client to view these changes.
View
BIN LinqPad Mongo Driver/lib/MongoDB.Bson.dll
Binary file not shown.
View
BIN LinqPad Mongo Driver/lib/MongoDB.Bson.pdb
Binary file not shown.
View
15,683 LinqPad Mongo Driver/lib/MongoDB.Driver.XML
15,683 additions, 0 deletions not shown because the diff is too large. Please use a local Git client to view these changes.
View
BIN LinqPad Mongo Driver/lib/MongoDB.Driver.dll
Binary file not shown.
View
BIN LinqPad Mongo Driver/lib/MongoDB.Driver.pdb
Binary file not shown.

0 comments on commit a2c59f9

Please sign in to comment.
Something went wrong with that request. Please try again.