Платформа объекта EntityKey / проблема Внешнего ключа

Чтобы включить контроллеры, вам нужно изменить регистрацию маршрутов, чтобы сообщить им, где искать контроллеры:

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

7
задан Welbog 24 June 2009 в 13:56
поделиться

3 ответа

Вместо создания 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

Надеюсь, это поможет

Alex

18
ответ дан 6 December 2019 в 10:02
поделиться

Хорошо, вот что я придумал вместо использования 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
0
ответ дан 6 December 2019 в 10:02
поделиться

Что вам нужно, так это экземпляр как Brand, так и Gender, а затем установить Brand.Gender на экземпляр Gender. Тогда вы сможете без проблем сэкономить.

1
ответ дан 6 December 2019 в 10:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: