Hej,
Jag har suttit sen kl 08:00 med ett problem jag inte förstår mig på.
Så nu väljer jag att be om hjälp
Jag har skapat ett vanligt Asp.Net MVC project med ApplicationUser klasserna för inlogg osv.
Det jag försöker göra är att lägga till ytterligare kolumner i denna klass och en referens till en annan klass jag har lagt till "symptom". Klasserna ser ut såhär:
och symptom klass:
När jag kör en code first migration så ser koden ut som sådan:
jag har även populerat tabellen "symptom" med data:
När jag kör applikationen och klickar på register så populeras fältet symptom med rätt data, dropdownlist. Jag fyller i alla andra fält korrekt och klickar register, då dyker detta fel upp:
I kontrollern "AccountController" så anropas post metoden Register och kraschar vid markerade raden nedan:
Någon som har en anning om vad jag har gjort fel?
Jag har suttit sen kl 08:00 med ett problem jag inte förstår mig på.
Så nu väljer jag att be om hjälp
Jag har skapat ett vanligt Asp.Net MVC project med ApplicationUser klasserna för inlogg osv.
Det jag försöker göra är att lägga till ytterligare kolumner i denna klass och en referens till en annan klass jag har lagt till "symptom". Klasserna ser ut såhär:
Kod:
public class ApplicationUser : IdentityUser
{
public Symptom Symptom { get; set; }
[Required]
public byte SymptomId { get; set; }
[Required]
public string Telephone { get; set; }
public string Descripton { get; set; }
}
och symptom klass:
Kod:
public class Symptom
{
public byte Id { get; set; }
[Required]
[StringLength(255)]
public string Name { get; set; }
}
När jag kör en code first migration så ser koden ut som sådan:
Kod:
public partial class UpdateUserTblAddSymptom : DbMigration
{
public override void Up()
{
AddColumn("dbo.AspNetUsers", "SymptomId", c => c.Byte());
CreateIndex("dbo.AspNetUsers", "SymptomId");
AddForeignKey("dbo.AspNetUsers", "SymptomId", "dbo.Symptoms", "Id", cascadeDelete: true);
}
public override void Down()
{
DropForeignKey("dbo.AspNetUsers", "SymptomId", "dbo.Symptoms");
DropIndex("dbo.AspNetUsers", new[] { "SymptomId" });
DropColumn("dbo.AspNetUsers", "SymptomId");
}
}
jag har även populerat tabellen "symptom" med data:
Kod:
public partial class PopulateSymptomTable : DbMigration
{
public override void Up()
{
Sql("INSERT INTO Symptoms (Id, Name) VALUES (1, 'Affektiva störningar')");
Sql("INSERT INTO Symptoms (Id, Name) VALUES (2, 'Psykossjukdomar')");
Sql("INSERT INTO Symptoms (Id, Name) VALUES (3, 'Ångestsjukdomar')");
Sql("INSERT INTO Symptoms (Id, Name) VALUES (4, 'Ätstörningar')");
Sql("INSERT INTO Symptoms (Id, Name) VALUES (5, 'Beroende och substansrelaterade sjukdomar')");
Sql("INSERT INTO Symptoms (Id, Name) VALUES (6, 'Sexualitet och sexuella störningar')");
Sql("INSERT INTO Symptoms (Id, Name) VALUES (7, 'Somatoforma och psykosomatiska sjukdomar')");
Sql("INSERT INTO Symptoms (Id, Name) VALUES (8, 'Personlighetsstörningar')");
Sql("INSERT INTO Symptoms (Id, Name) VALUES (9, 'Neuropsykiatriskt funktionshinder')");
}
public override void Down()
{
Sql("DELETE FROM Symptoms WHERE Id IN (1, 2, 3, 4, 5, 6, 7, 8, 9)");
}
}
När jag kör applikationen och klickar på register så populeras fältet symptom med rätt data, dropdownlist. Jag fyller i alla andra fält korrekt och klickar register, då dyker detta fel upp:
Kod:
Violation of PRIMARY KEY constraint 'PK_dbo.Symptoms'. Cannot insert duplicate key in object 'dbo.Symptoms'. The duplicate key value is (5). The statement has been terminated.
I kontrollern "AccountController" så anropas post metoden Register och kraschar vid markerade raden nedan:
Kod:
//
// POST: /Account/Register
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Register(RegisterViewModel model)
{
var symptom = _context.Symptoms.Single(s => s.Id == model.Symptom);
//var status = _context.Statuses.Single(s => s.Id == model.Status);
if (ModelState.IsValid)
{
var user = new ApplicationUser()
{
UserName = model.UserName,
Telephone = model.Telephone,
Symptom = symptom,
//Status = status,
Descripton = model.Descripton
};
HÄR KRASCHAR KODEN!
var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
await SignInAsync(user, isPersistent: false);
return RedirectToAction("Index", "Home");
}
else
{
AddErrors(result);
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
Någon som har en anning om vad jag har gjort fel?