我已经写了一个小程序,我需要在MongoDB数据库中插入一些对象(我的情况下是员工)。每个员工都需要从带有字符串的预定义列表中获取随机名称。
这就是我想出的并且正在发挥作用:
class Program
{
public class Employee
{
public string Name { get; set; }
}
static void Main(string[] args)
{
MongoClient client = new MongoClient();
var server = client.GetServer();
var db = server.GetDatabase("testdb");
var collection = db.GetCollection<Employee>("testcollection");
Random random = new Random();
List<string> names = new List<string>() {"John","Matthew","Chris"};
for (int i = 0; i < 5; i++)
{
int nameIndex = random.Next(0, 3);
string nameValue = names[nameIndex];
Employee employee = new Employee
{
Name = nameValue
};
collection.Save(employee);
}
}
}
然而,这段代码感觉有点脏,我正在寻找一种很好的方法来清理它。特别是如果我想为员工对象添加更多属性。
编辑: @Eric Lippert 当然!首先,几乎所有事情都发生在main方法中。使用单个列表很好,但我想向员工对象添加更多数据。它在未来会变得很小。
所以,如果我想添加更多List,我必须复制我当前的代码。例如,我想迭代另一个包含作业类型(10个项目)的列表,另一个列表用于位置(50个项目)。对于我想要添加到Employee-object的每个属性,我必须从Random对象中编写一个Next()函数的新行。
编辑3:
public static IMongoDatabase Connect()
{
MongoClient client = new MongoClient();
var db = client.GetDatabase("testdb");
return db;
}
static void Main(string[] args)
{
Connect();
var collection = db.GetCollection<Employee>("testcollection");
}
错误:名称&#39; db&#39;在当前的背景下不存在。
答案 0 :(得分:0)
如果要从其他列表中应用更多随机值,可以执行以下操作,这主要归结为删除不必要的nameIndex和nameValue变量:
for (int i = 0; i < 5; i++)
{
Employee employee = new Employee
{
Name = names[random.Next(0, names.Count)]
};
collection.Save(employee);
}
答案 1 :(得分:0)
您可以将单独的部分抽象为新的类,例如DatabaseSeeder
和Database
,这只是清除职责而不是在main
方法中全部使用
class Program
{
public class Employee
{
public string Name { get; set; }
}
public class Database
{
public ICollection<Employee> GetCollection()
{
MongoClient client = new MongoClient();
var server = client.GetServer();
var db = server.GetDatabase("testdb");
var collection = db.GetCollection<Employee>("testcollection");
}
}
public class DatabaseSeeder
{
private ICollection<Employee> collection;
public DatabaseSeeder(ICollection<Employee> collection)
{
this.collection = collection;
}
public void Seed()
{
Random random = new Random();
List<string> names = new List<string>() {"John","Matthew","Chris"};
for (int i = 0; i < 5; i++)
{
int nameIndex = random.Next(0, 3);
string nameValue = names[nameIndex];
Employee employee = new Employee
{
Name = nameValue
};
collection.Save(employee);
}
}
}
static void Main(string[] args)
{
var collection = new Database().GetCollection();
var databaseSeeder = new DatabaseSeeder(collection);
databaseSeeder.Seed();
}
}