Чтобы включить контроллеры, вам нужно изменить регистрацию маршрутов, чтобы сообщить им, где искать контроллеры:
routes.MapRoute(name: "Default", url: "{controller}/{action}/{id}",
namespaces: new[] {"[Namespace of the Project that contains your controllers]"},
defaults: new {controller = "Home", action = "Index", id = UrlParameter.Optional});
для включения Просмотр вы создаете пользовательский ViewEngine:
public class CustomViewEngine: RazorViewEngine
{
public CustomViewEngine()
{
MasterLocationFormats = new string[]
{
"~/bin/Views/{1}/{0}.cshtml",
"~/bin/Views/{1}/{0}.vbhtml",
"~/bin/Views/Shared/{0}.cshtml",
"~/bin/Views/Shared/{0}.vbhtml"
};
ViewLocationFormats = new string[]
{
"~/bin/Areas/{2}/Views/{1}/{0}.cshtml",
"~/bin/Areas/{2}/Views/{1}/{0}.vbhtml",
"~/bin/Areas/{2}/Views/Shared/{0}.cshtml",
"~/bin/Areas/{2}/Views/Shared/{0}.vbhtml"
};
.
.
.
}
}
protected void Application_Start()
{
ViewEngines.Engines.Add(new CustomViewEngine());
для Более подробную информацию смотрите в реализации RazorViewEngin по умолчанию.
Вот несколько хороших статей:
Хранение контроллеров ASP.NET MVC & amp; Представления в отдельных сборках
ASP.NET MVC: установка контроллеров в отдельную сборку
Как вызывать контроллеры во внешних сборках в ASP Приложение .NET MVC
Вместо создания EntityKey создайте заглушку объекта Gender (извините, я не специалист по VB, поэтому в C #):
Gender g = new Gender{ID = Int32.Parse(Request.Form("Gender"))};
Затем вы прикрепляете Gender к соответствующему EntitySet
(имя свойства в DB
, которое вы получаете Gender entity from - строка ниже):
DB.AttachTo("Genders",g);
Это переводит базу данных в состояние, в котором пол находится в ObjectContext
в неизмененном состоянии без запроса к базе данных. Теперь вы можете строить отношения как обычно.
brand.Gender = g;
DB.AddToBrand(brand);
DB.SaveChanges();
Вот и все. Не нужно возиться с EntityKeys
Надеюсь, это поможет
Хорошо, вот что я придумал вместо использования updateModel. В любом случае это кажется проблематичным / потенциально опасным для безопасности, поскольку в сообщение могут быть добавлены дополнительные поля. Новый экземпляр Gender может быть создан с помощью trygetObjectByKey. Пока это работает. Любые другие предложения по получению UpdateModel для обновления объекта свойства Gender приветствуются.
Dim cID As Integer
cID = CInt(Request.Form("Gender"))
Dim key As New EntityKey(DB.DefaultContainerName() & ".Gender", "ID", cID)
Dim objGenderDS As New Gender
'Bring back the Gender object.
If DB.TryGetObjectByKey(key, objGenderDS) Then
Brand.GenderReference.EntityKey = key
Brand.Gender = objGenderDS
DB.AddToBrand(Brand)
DB.SaveChanges()
Else
End If
Что вам нужно, так это экземпляр как Brand, так и Gender, а затем установить Brand.Gender на экземпляр Gender. Тогда вы сможете без проблем сэкономить.