Jeg er i gang med et lille skole projekt som jeg laver i ASP.NET MVC3 (C#). Jeg bruger Entity Framework 4, og min database er en MS SQL 2008.
Jeg har i mit projekt to klasser: User.cs UserTexts.cs
I min User.cs klasse har jeg følgende properties:
//Users public int Id { get; set; } public string Username { get; set; } public string Password { get; set; } public string Email { get; set; } public bool Active { get; set; } public bool Deleted { get; set; } public bool? Online { get; set; } public DateTime LastActivity { get; set; } public DateTime Birth { get; set; } public int Gender { get; set; } public DateTime CreateDate { get; set; } public int? MemberStatus { get; set; } public int? Height { get; set; } public int? Weight { get; set; } public int? CivilStatus { get; set; } public int? HairColor { get; set; } public int? EyeColor { get; set; } public int? SexualOrientation { get; set; } public int? BodyBuilding { get; set; } public int? Piercings { get; set; } public int? Tattoos { get; set; } public int? Children { get; set; } public int? Smoking { get; set; }
//UserTexts public virtual UserTexts Texts { get; set; }
I min UserTexts.cs har jeg følgende properties: public int Id { get; set; } public int UserId { get; set; } public string About { get; set; } public string Searching { get; set; } public int Deleted { get; set; }
Det jeg gerne vil opnå, er når jeg laver en ny instans i User objektet, så vil jeg gerne kunne hentet teksten "About":
var Bruger = new User(); var Tekst = Bruger.Texts.About;
Jeg får ikke nogen fejl ved build, men når jeg åbner siden får jeg denne fejl "{"Invalid column name 'UserTextsId'."}".
Jeg kan "undgå" fejlen ved at tilføje denne property i min UserTexts.cs: public virtual User User { get; set; }
Men derefter får jeg så i stedet en fejl med at der ikke er nogen objekt reference, hvilket jeg godt kan forstå da jeg ikke har oprettet en instans af UserTexts nogen steder.
Du mangler at fortælle hvordan forholdet er mellem User og UserTexts. Jeg gætter på den tror der er en "UserTextsId" i din User class. Hvilket der ikke er. Derfor skal du explicit fortælle den hvordan den skal mappe de 2 sammen.
public class TestDB : DbContext { public DbSet<Models.Community.User> Users { get; set; } public DbSet<Models.Community.UserTexts> UserTexts { get; set; }
Det er en lille smutter at det står i flertal. Der er kun en record pr. user i UserTexts. Idét fra Users skal matche den ene (eller ingen) record der er i UserTexts på kolonnen UserId i UserTexts.
Men ... i den kode du har postet ... bruger du jo slet ikke fin datacontext, men bare din POCO class.
Hvis der kun må være 1, hvorfor er den så ikke sammen med User info ?
Men følgende virker ved mig. Jeg bruger SqlServerCompact i stedet for en rigtig Sql server her, da dette er nemmere, men ddet virker og burde være det samme for en rigtig SQL Server.
public class User { public int Id { get; set; } public string Username { get; set; } public string Password { get; set; }
public virtual UserText Text { get; set; }
}
public class UserText { public int Id { get; set; } public int UserId { get; set; } public string About { get; set; } public string Searching { get; set; } public int Deleted { get; set; }
}
public class InitDB : DropCreateDatabaseAlways<MyContext> { protected override void Seed(MyContext context) { var user = new User() { Id = 10, Password = "pass", Username = "buzz", Text = new UserText() { About = "Dette er mig", Deleted = 10, } };
context.Users.Add(user); } }
public class MyContext : DbContext { public DbSet<User> Users { get; set; } public DbSet<UserText> UserTexts { get; set; }
public MyContext() { Database.SetInitializer(new InitDB()); } }
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.