ASP.NET Core MVCとMongoDBの組み合わせのためにコードファーストができるライブラリを作った
2017.07.02
MVCでWebアプリを作っているなら、モデルを書いているはず。データベースがリレーショナルデータベースなら、C#ではEntityFrameworkが使えるはず。なのでモデルをちゃんと書くだけでデータベースもよしなに扱える。MongoDBはかつてはEntityFrameworkでいけたが、今はサポートを切られてしまっている。
今作っているものはC# + MongoDB。サポートを切られているとはいえ、コードファーストは導入したい。だからモデルを定義しておけばよしなにMongoDBでコレクションを扱ってくれるものを書くことにする。そんでもって書いた。
まず。MongoDBでCRUDすることを考えた従来のモデルの基本的部分。
ライブラリでコードファーストをやることを考えたモデル。
これまで書いていたモデルの宣言時にMongoDoc属性をつけるだけ。それでクラス名からコレクションを作ってくれる。あとは自分でコレクション名をつけたり、コレクションの作成オプションもルールに従って定義してあればよしなにやってくれる。
モデルを定義したら、MongoInitializer.Runメソッドを実行すればデータベースに接続してコレクションを作成してくれる。リフレクションでモデルを調べてコレクションの作成を行っているので、アセンブリ名とモデルが入ったネームスペースが必要。
マイグレーションは実装していないが、スキーマレスだし不必要かなとも思う。
https://github.com/hMatoba/Mango
もし使いたいなんていってくる人が現れたらライセンスやら整えよう。使い方はとりあえずテストコードを見ればわかるはず…
今作っているものはC# + MongoDB。サポートを切られているとはいえ、コードファーストは導入したい。だからモデルを定義しておけばよしなにMongoDBでコレクションを扱ってくれるものを書くことにする。そんでもって書いた。
using Mango;
まず。MongoDBでCRUDすることを考えた従来のモデルの基本的部分。
class Model1
{
[BsonId]
[BsonRepresentation(BsonType.String)]
public string Id { get; set; }
[BsonElement("token")]
[BsonRepresentation(BsonType.String)]
public string Token { get; set; }
}
ライブラリでコードファーストをやることを考えたモデル。
[MongoDoc]
class Model1
{
[BsonId]
[BsonRepresentation(BsonType.String)]
public string Id { get; set; }
[BsonElement("token")]
[BsonRepresentation(BsonType.String)]
public string Token { get; set; }
}
// Create collection(s)
MongoInitializer.Run(connectionString, dbName, assemblyName, modelsNamespace);
これまで書いていたモデルの宣言時にMongoDoc属性をつけるだけ。それでクラス名からコレクションを作ってくれる。あとは自分でコレクション名をつけたり、コレクションの作成オプションもルールに従って定義してあればよしなにやってくれる。
モデルを定義したら、MongoInitializer.Runメソッドを実行すればデータベースに接続してコレクションを作成してくれる。リフレクションでモデルを調べてコレクションの作成を行っているので、アセンブリ名とモデルが入ったネームスペースが必要。
マイグレーションは実装していないが、スキーマレスだし不必要かなとも思う。
https://github.com/hMatoba/Mango
もし使いたいなんていってくる人が現れたらライセンスやら整えよう。使い方はとりあえずテストコードを見ればわかるはず…
comment: 0