我想从模型中分离EF层。
我需要一个EF Builder来将我的模型发送给它(我为mongodb找到了此代码,但我需要EF core):
builder.AddMongo();
builder.AddMongoRepository<Cart>("Carts");
builder.AddMongoRepository<Customer>("Customers");
builder.AddMongoRepository<Product>("Products");
上面的代码在启动文件中。
如您所见,我从applicationsetting.json
文件传递了参数:
"mongo": {
"connectionString": "mongodb://localhost:27017",
"database": "customers-service",
"seed": false
},
这是mongo示例代码:
public static class Extensions
{
public static void AddMongo(this ContainerBuilder builder)
{
builder.Register(context =>
{
var configuration = context.Resolve<IConfiguration>();
var options = configuration.GetOptions<MongoDbOptions>("mongo");
return options;
}).SingleInstance();
builder.Register(context =>
{
var options = context.Resolve<MongoDbOptions>();
return new MongoClient(options.ConnectionString);
}).SingleInstance();
builder.Register(context =>
{
var options = context.Resolve<MongoDbOptions>();
var client = context.Resolve<MongoClient>();
return client.GetDatabase(options.Database);
}).InstancePerLifetimeScope();
builder.RegisterType<EFDbInitializer>()
.As<IEFDbInitializer>()
.InstancePerLifetimeScope();
builder.RegisterType<MongoDbSeeder>()
.As<IEFDbSeeder>()
.InstancePerLifetimeScope();
}
public static void AddMongoRepository<TEntity>(this ContainerBuilder builder, string collectionName)
where TEntity : IIdentifiable
=> builder.Register(ctx => new EFRepository<TEntity>(ctx.Resolve<IMongoDatabase>(), collectionName))
.As<IMongoRepository<TEntity>>()
.InstancePerLifetimeScope();
}
我的问题是:像mongo一样,EF是否有解决方案?
mongoDb的所有代码都可用。
答案 0 :(得分:2)
首先,我相信会有一些困惑:
也就是说,您可以将EF Core与several data storages配合使用,例如MongoDB或SQL Server。
在实体(数据访问层)和业务模型之间设置单独的层是一种很好的做法,应鼓励这样做。
因为主题广泛,并且存在大量文档和教程以及该主题,所以我更愿意为您提供一些链接,而不是为您提供完整的体系结构。
您可以从Microsoft检查this documentation来查看相关的层以及它们应包含的内容。
此外,我建议您咨询this github repo,该公司提供了大量基于.net核心的干净架构。
可以随意深入研究那些链接,它们提供了许多宝贵的信息。
希望有帮助。