ASP.NET OData APIバージョン6.0を使用しています タイプなしオブジェクトを使用してEDMモデルを作成しています。 私は自分のデータベースにセマンティックデータモデルを持っているので、オブジェクト型のクラッシュ操作は同じコードを使って行われます。だから、基本的には、ODataクエリ文字列を解析し、オブジェクトをロードする独自の方法にそれを適用するコントローラを1つ作成するだけです。私はこれをすべてほぼ実践しています。どのようにルーティングダイナミックを定義するには欠けているもの....ASP.NET OData、型なし/型なしエンティティを同じコントローラにルーティング
エンティティx、y、zを同じコントローラを使用するようにマップするにはどうすればよいですか?
モデルを構築するためのコードは、以下のようになります。 IdentitiesController、ResourcesController、SystemsController、OrgunitsControllerという名前のコントローラにルーティングされます。しかし、それらはすべて同じコントローラー "NativeObjectsController"にルーティングする必要があります。
以下は、可能なエンティティタイプのセットです...エンドユーザーが独自のタイプを作成できるため、特殊なコントローラー今のところ...
public static void Register(HttpConfiguration config)
{
IList<IODataRoutingConvention> routingConventions = ODataRoutingConventions.CreateDefault();
IODataPathHandler pathHandler = new DefaultODataPathHandler();
config.MapODataServiceRoute(
routeName: "ODataRoute",
routePrefix: "odata/dataobjects",
model: GetEntityModel()
// ,pathHandler: pathHandler,
//routingConventions: routingConventions
);
var routes = config.Routes;
config.AddODataQueryFilter();
config.EnsureInitialized();
}
public static EdmModel GetEntityModel()
{
if (model != null)
return model;
model = new EdmModel();
EdmEntityContainer container = new EdmEntityContainer(ns_ois, "OISContainer");
model.AddElement(container);
AddDataObjectTypeToModel(model, container, "IDENTITY", "Identities");
AddDataObjectTypeToModel(model, container, "RESOURCE", "Resources");
AddDataObjectTypeToModel(model, container, "SYSTEM", "Systems");
AddDataObjectTypeToModel(model, container, "ORGUNIT", "OrgUnits");
return model;
}
private static void AddDataObjectTypeToModel(EdmModel model, EdmEntityContainer container, string dataObjectSystemName, string entitySetName)
{
DataObjectTypeController dotController = Factory.Default.CreateController<DataObjectTypeController>();
int dotId = dotController.GetId(dataObjectSystemName);
DataObjectType dot = dotController.GetDataObjectType(dotId);
var entityObject = new EdmEntityType(ns_ois, dataObjectSystemName);
model.AddElement(entityObject);
entityObject.AddKeys(entityObject.AddStructuralProperty("Id", EdmPrimitiveTypeKind.Int32, false));
entityObject.AddStructuralProperty("UId", EdmPrimitiveTypeKind.Guid, false);
entityObject.AddStructuralProperty("DisplayName", EdmPrimitiveTypeKind.String, false);
foreach (var property in dot.GetProperties())
{
}
var entitySet = container.AddEntitySet(entitySetName, entityObject);
}