Avatar billede jens_k Nybegynder
15. oktober 2011 - 18:13 Der er 5 kommentarer

Entity Framework 4 - Reference til anden klasse.

Hej Eksperter,

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.

Er der en ekspert som kan hjælpe mig med dette?

Med venlig hilsen

Jens_K
Avatar billede Syska Mester
15. oktober 2011 - 18:51 #1
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.

Du må have en mapping class et sted.

mvh
Avatar billede jens_k Nybegynder
15. oktober 2011 - 19:10 #2
public class TestDB : DbContext
    {
        public DbSet<Models.Community.User> Users { get; set; }
        public DbSet<Models.Community.UserTexts> UserTexts { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
        }
    }
Avatar billede Syska Mester
15. oktober 2011 - 19:30 #3
Du skal i din OnModelCreating fortælle hvordan forholdet er mellem User og UserTexts.

Men du har "UserTexts" i flertal, er det så meningen en user skal kunne have flere af dem ?

mvh
Avatar billede jens_k Nybegynder
15. oktober 2011 - 20:39 #4
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.
Avatar billede Syska Mester
15. oktober 2011 - 21:59 #5
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());
        }
    }
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester