Я создавал базовое приложение MVC и получил несколько затруднений.Основным является подключение и поиск чего-то в mongodb.Я также пытался реализовать дженерики.Ниже я предоставил некоторый код, чтобы показать вам, что я пытаюсь реализовать.Я считаю, что моя проблема заключается в получении правильной коллекции из базы данных, но затем я столкнулся с проблемой преобразования T в User.
Я искал разные способы, чтобы попытаться это выяснить, но я был в тупике довольно давно.Я реализовал функцию Create, которая использует функцию ConnectToMongo, и она работает нормально, но когда я пытаюсь реализовать выражение find или findbyexpress и сталкиваюсь с этими ошибками.Я надеюсь, что кто-то может указать мне правильное направление, спасибо.
/// <summary>
/// Finds the object by expression.
/// </summary>
/// <returns>The object by expression.</returns>
/// <param name="entity">Entity.</param>
/// <param name="expression">Expression.</param>
/// <typeparam name="T">The 1st type parameter.</typeparam>
private async Task<T> FindObjectByExpression<T>(T entity, Expression<Func<T, bool>> expression)
{
T result;
try
{
var collection = this.ConnectToMongo(entity);
if (collection == null)
{
Console.WriteLine($"Collection: {entity.GetType()} does not exsit.");
return default(T);
}
var filterDefinition = Builders<T>.Filter.Where(expression);
result = (T)await collection.FindAsync(filterDefinition);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return default(T);
}
return result;
}
/// <summary>
/// Connects to mongo.
/// </summary>
/// <returns>The to mongo.</returns>
/// <param name="entity">Entity.</param>
private IMongoCollection<T> ConnectToMongo<T>(T entity)
{
IMongoCollection<T> collection = null;
try
{
MongoClientSettings setting = new MongoClientSettings
{
Server = new MongoServerAddress("localhost", 27017)
};
MongoClient client = new MongoClient(setting);
var mongoDbServer = client.GetDatabase(DBName);
collection = mongoDbServer.GetCollection<T>($"{entity.GetType().Name}");
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
return collection;
}
public abstract class Command
{
public Command(Guid? ID)
{
if(ID == null)
{
ID = Guid.NewGuid();
}
else
{
this.ID = ID.Value;
}
}
[BsonId]
public Guid ID { get; set; }
public string Email { get; set; }
public string Password { get; set; }
}
public class User : Command
{
public User(Guid? Id)
: base(Id)
{
this.classDictionary = new Dictionary<string, string>();
}
[Required]
public Entitlement UserEntitlement { get; set; }
[Required]
public string FirstName { get; set; }
[Required]
public string LastName { get; set; }
[Required]
public string UniID { get; set; }
// Maps from Course ID to Section ID
public Dictionary<string, string> classDictionary { get; set; }
}
public enum Entitlement
{
Student = 10,
Admin = 20,
Bot = 30,
Unknown = 0
}