Code first i membership provider

Code first i membership provider
Odyn
  • Rejestracja:około 16 lat
  • Ostatnio:ponad 5 lat
  • Postów:493
0

Cześć.

Mam pytanie odnośnie membership providera dla ASP .NET MVC.

Jak rozszerzyć ViewModel dla rejestracji i dodać do niego więcej pól? ( Do samego ViewModelu można bez problemu dopisać ) natomiast w AccountControlerze znajduje się metoda AddMemberAsync() która nie przyjmuje więcej parametrów i nie ma do niej dostępu aby ją nadpisać )

Oprócz tego jak dodać swój kontekst ze swoimi własnymi modelami aby wygenerowały się dodatkowe tabele oprócz tych domyślnych ?

Z góry dziękuję za pomoc ;)


M8
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:23
0

Z tego co się orientuję, ASP.NET Identity (http://www.asp.net/identity) umożliwia dodawanie dodatkowych pól. Nie wiem na ile możesz z niego skorzystać, ale warto się z nim zapoznać.


itmichal.wordpress.com/
N0
  • Rejestracja:około 17 lat
  • Ostatnio:ponad 6 lat
  • Lokalizacja:Kraków
  • Postów:767
0

gdzie znajduje się taka funkcja? bo ja w account controller nie mam czegoś takiego... do tego dochodzi pytanie jaki typ uwierzytelniania używasz?


Pomogłem? To dobrze :)
Odyn
  • Rejestracja:około 16 lat
  • Ostatnio:ponad 5 lat
  • Postów:493
0

Ok już wyjaśniam.

Więc korzystam z "Inidividual User Accounts".

Chodzi mi konkretnie o metodę w AccountControlerze w POSTowej akcji Register i tam znajdje się UserManager.CreateAsync(), która przyjmuje tylko dwa parametry user i model.Password.

A wcześniej niby tworzymy tego usera i pobieramy username ale nie mogę dopisać tam więcej właściwości. W sumie nie wiem jak.

Chce zrobić po prostu Context() tak jak robi się to w Code First i w tym kontekscie potworzyć sobie DbSety<> i Mapingi przy użyciu fluentMaping.

Natomiast takie pytanie mam jak to zgrać z tym membership providerem bo ona ma tam swój Context() znajdujacy się w IdentityModel.cs zwany ApplicationDbContext IdentityDbContext<ApplicationUser>

No i np. jak chce dobrać się do tego IdentityDbContext<> dając ppm -> go to declaration to otwiera mi się Object Browser i nie mam dostępu do tych klas :P


0

@Odyn
Możesz sobie normalnie dodawać DBSety< przecież w Entity Frameworku (tym z Identity) i one tworzą osobną tabelę (sprawdzałem). Metoda CreateAsync przyjmuje user czyli tworzysz usera a potem przekazujesz do metody, tak?

0

@Truster_log

Ok a w którym miejscu wstawiasz te DbSety? W IdentityModel.cs czy gdzieś indziej?

Ja myślałem właśnie zrobić 2 kontext ale chyba będzie krzyczał po mnie że dwa konteksty nie mogą istnieć :)

Odyn
  • Rejestracja:około 16 lat
  • Ostatnio:ponad 5 lat
  • Postów:493
0

Dobra wiem już :)

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection", throwIfV1Schema: false)
{
}

    // dbsety tutaj :)

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();

        
    }

    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }
}

Odyn
  • Rejestracja:około 16 lat
  • Ostatnio:ponad 5 lat
  • Postów:493
0

Wygenerowały się moje modele. Tylko, że musiałem skorzystać z migracji :)


Odyn
  • Rejestracja:około 16 lat
  • Ostatnio:ponad 5 lat
  • Postów:493
0

Natomiast mem teraz trochę inny problem.

Entities in 'ApplicationDbContext.Addresseses' participate in the 'Addresses_Suplier' relationship. 0 related 'Addresses_Suplier_Target' were found. 1 'Addresses_Suplier_Target' is expected.

W tych modelach:

Kopiuj
 
public class Addresses
    {
        public int Id { get; set; }
        public string Country { get; set; } // panstwo
        public string PostalCode { get; set; } // kod pocztowy
        public string City { get; set; } // miasto
        public string StreetName { get; set; } // pelna nazwa ulicy
        public string FlatNumber { get; set; } // numer mieszkania
        public virtual Customer Customer { get; set; }
        public virtual Suplier Suplier { get; set; }

    }
Kopiuj
 
public class Suplier
    {
        public int Id { get; set; }
        public string CompanyName { get; set; } // nazwa firmy
        public ICollection<Addresses> Address { get; set; } // jej adresy
    }

A w fluent mapping mam tak:

Kopiuj
 
protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();

            // ustalenie kluczy dla poszczególnych modeli
            modelBuilder.Entity<Addresses>().HasKey(a => a.Id);
            modelBuilder.Entity<Product>().HasKey(a => a.Id);
            modelBuilder.Entity<ProductCategory>().HasKey(a => a.Id);
            modelBuilder.Entity<NutritionalValue>().HasKey(a => a.Id);
            modelBuilder.Entity<Customer>().HasKey(a => a.Id);
            modelBuilder.Entity<Order>().HasKey(a => a.Id);
            modelBuilder.Entity<OrderDetail>().HasKey(a => a.Id);
            modelBuilder.Entity<Suplier>().HasKey(a => a.Id);

            // definicj relacji pomiedzy modelami
            modelBuilder.Entity<Suplier>().HasMany(s => s.Address);

            modelBuilder.Entity<Product>().HasMany(p => p.Category);
            modelBuilder.Entity<Product>().HasMany(p => p.Supliers);
            modelBuilder.Entity<Product>().HasMany(p => p.OrderDetails);
            modelBuilder.Entity<Product>().HasRequired(p => p.NutritionalValues);

            modelBuilder.Entity<ProductCategory>().HasMany(p => p.Products);

            modelBuilder.Entity<OrderDetail>().HasMany(od => od.Products);
            modelBuilder.Entity<OrderDetail>().HasRequired(od => od.Order);

            modelBuilder.Entity<Order>().HasRequired(o => o.OrderDetail);
            modelBuilder.Entity<Order>().HasRequired(o => o.Customer);
            modelBuilder.Entity<Order>().HasMany(o => o.Products);

            modelBuilder.Entity<Customer>().HasMany(c => c.Addresses);
            modelBuilder.Entity<Customer>().HasMany(c => c.Orders);

            modelBuilder.Entity<Addresses>().HasRequired(a => a.Customer);
            modelBuilder.Entity<Addresses>().HasRequired(a => a.Suplier);

            
            base.OnModelCreating(modelBuilder);
        }

I nie wiem czemu to wywala podczas rejestracji użytkownika poprzez AccountController, którego rejestruje sobie w POSTowej akcji

Kopiuj
 [HttpPost]
        [AllowAnonymous]
        [ValidateAntiForgeryToken]
        public async Task<ActionResult> Register(RegisterViewModel model)
        {
            if (ModelState.IsValid)
            {
                var user = new ApplicationUser()
                {
                    UserName = model.Email,
                    Email = model.Email,
                    Customer = new Customer()
                    {
                        FirstName = model.FirstName,
                        LastName = model.LastName,
                        Age = uint.Parse(model.Age),
                        Gender = model.Gender,
                        PhoneNumber = model.PhoneNumber,
                        Addresses = new Collection<Addresses>()
                        {
                            new Addresses()
                            {
                                 Country = model.Country, 
                                 City = model.City,
                                 PostalCode = model.PostalCode,
                                 StreetName = model.StreetName,
                                 FlatNumber = model.FlatNumber
                            }
                        }
                    }
                };
                IdentityResult result = await UserManager.CreateAsync(user, model.Password);
                if (result.Succeeded)
                {
                    await SignInAsync(user, isPersistent: false);

                    // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771
                    // Send an email with this link
                    // string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
                    // var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
                    // await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>");

                    return RedirectToAction("Index", "Home");
                }
                else
                {
                    AddErrors(result);
                }
            }
 

Bardzo proszę o pomoc :)


Odyn
  • Rejestracja:około 16 lat
  • Ostatnio:ponad 5 lat
  • Postów:493
0

Ok wiem już co źle zrobiłem.

Z jednej strony miałem relacje 1 do wielu a z drugiej 1 do 1 i musiałem dodać ICollection<> i aktualizować migracje ;)


0

@Odyn zarzucisz jakis tutorial z którego korzystałeś do nauki Identity ? Jak Twoj OWIM wyglada?

Odyn
  • Rejestracja:około 16 lat
  • Ostatnio:ponad 5 lat
  • Postów:493
0

Nie mam żadnego tutoriala :) Sam to rozkminiam :)


Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)