Я запускаю новый проект с монго, NoRM и .NET MVC.
Прежде чем я использовал FluentNHibernate, таким образом, мои идентификаторы были целым числом, теперь моими идентификаторами является ObjectId. Таким образом, когда у меня есть ссылка Редактирования, мой URL похож на это:
WebSite/Admin/Edit/23,111,160,3,240,200,191,56,25,0,0,0
И это не связывает автоматически с моим контроллером как ObjectId
У Вас есть какие-либо предложения/лучшие практики для работы с этим? Я должен кодировать/декодировать идентификатор каждый раз?
Спасибо!
Использую следующее
public class ObjectIdModelBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
string value = controllerContext.RouteData.Values[bindingContext.ModelName] as string;
if (String.IsNullOrEmpty(value)) {
return ObjectId.Empty;
}
return new ObjectId(value);
}
}
и
protected void Application_Start()
{
......
ModelBinders.Binders.Add(typeof(ObjectId), new ObjectIdModelBinder());
}
чуть не забыл, сделайте URL из ObjectId.ToString()
Я не знаком с типом ObjectId
, но вы могли бы написать привязку пользовательской модели , которая позаботится о преобразовании ограничения маршрута id
в экземпляр из ObjectId
.
Знаете ли вы, что можно использовать атрибут [MongoIdentifier], чтобы любое свойство действовало как уникальный ключ?
Я решил эту проблему, позаимствовав методику из WordPress путем представления каждой сущности свойством "url slug" и украшения этого свойства с помощью [MongoIdentifier].
Итак, если бы у меня был человек по имени Джонни Уокер, я бы создал фрагмент «Джонни-Уокер». Вам просто нужно убедиться, что эти URL-адреса остаются уникальными, и вы можете поддерживать чистые URL-адреса без уродливых идентификаторов объектов.