2013-04-16 2 views
1

J'ai une table MS-SQL comme indiqué ci-dessous.Entity Framework Code-First: Comment concevoir?

Tableau des utilisateurs

CREATE TABLE [dbo].[Users]( 
[UserId] [uniqueidentifier] NOT NULL Primary Key, 
[UserAccount] [nvarchar](50) NOT NULL  Unique, 
[Password] [nvarchar](50) NOT NULL, 
[UserEmail] [nvarchar](50) NOT NULL, 
[JoinDate] [datetime2](7) NOT NULL, 
[LoginDate] [datetime2](7) NULL) 

Rôles Tableau

CREATE TABLE [dbo].[Roles](
[RoleId] [uniqueidentifier] NOT NULL Primary Key, 
[RoleName] [nvarchar](50) NOT NULL  Unique, 
[Note] [nvarchar](50) NOT NULL, 
[RegistDate] [datetime2](7) NOT NULL) 

UsersInRoles Tableau

CREATE TABLE [dbo].[UsersInRoles](
[UserId] [uniqueidentifier] NOT NULL, 
[RoleId] [uniqueidentifier] NOT NULL, 
[SetDate] [datetime2](7) NOT NULL, 
PRIMARY KEY CLUSTERED (
[UserId] ASC, 
[RoleId] ASC)WITH (
PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY] 
GO 

ALTER TABLE [dbo].[UsersInRoles] WITH CHECK ADD FOREIGN KEY([RoleId]) REFERENCES [dbo].[Roles] ([RoleId]) GO 
ALTER TABLE [dbo].[UsersInRoles] WITH CHECK ADD FOREIGN KEY([UserId]) REFERENCES [dbo].[Users] ([UserId]) GO 

Je suis en train d'exprimer EF-code. D'abord ce

Entité Utilisateur Classe

public class User 
{ 
    public Guid UserId { get; set; } 
    public string UserAccount { get; set; } 
    public string Password { get; set; } 
    public string UserEmail { get; set; } 
    public DateTime JoinDate { get; set; } 
    public DateTime LoginDate { get; set; } 
} 

Rôle classe Entité

public class Role 
{ 
    public Guid RoleId { get; set; } 
    public string RoleName { get; set; } 
    public string Note { get; set; } 
    public DateTime RegistDate { get; set; } 
} 

UsersInRole Entité Classe

public class UsersInRole 
{ 
    public Guid UserId { get; set; } 
    public Guid RoleId { get; set; } 
    public DateTime SetDate { get; set; } 
} 

Le problème de la clé étrangère, comment devrait UsersInRoles conçu?

S'il vous plaît laissez-moi savoir s'il y a un meilleur design.

+1

Je vous suggérerais simplement d'utiliser l'assistant Visual Studio Entity Model et de générer un modèle basé sur votre schéma de base de données. – Killrawr

Répondre

0

Ce n'est pas vraiment du code en premier si vous concevez votre base de données et que vous rendez le code conforme, n'est-ce pas? Des sons comme vous devriez avoir une collection de rôles définie sur votre classe User, puis laissez EntityFramework faire le travail de construction de cette table intermédiaire. Il va gérer les relations FK.

0

Je n'ai pas essayé d'exécuter le code suivant, donc je ne suis pas sûr à 100%. Cependant, je commencerais avec quelque chose comme ...

dans vos classes de domaine

public class User 
{ 
public Guid UserId { get; set; } 
public string UserAccount { get; set; } 
public string Password { get; set; } 
public string UserEmail { get; set; } 
public DateTime JoinDate { get; set; } 
public DateTime LoginDate { get; set; } 
} 

public class Role 
{ 
public Guid RoleId { get; set; } 
public string RoleName { get; set; } 
public string Note { get; set; } 
public DateTime RegistDate { get; set; } 
} 


public class UsersInRole 
{ 
public DateTime SetDate { get; set; } 
virtual User User { get; set; } 
virtual Role Role { get; set; } 
} 

dans votre contexte dont vous avez besoin

public DbSet<Role> Roles { get; set; } 

public DbSet<User> Users { get; set; } 

public DbSet<UsersInRole> UsersInRoles { get; set; } 

En option, vous pouvez inclure

public virtual ICollection<UsersInRole> Roles { get; private set; } 

dans la classe User

et/ou

public virtual ICollection<UsersInRole> Users { get; private set; } 

dans la classe de rôle qui gardera la même structure de données.

+0

Merci pour votre réponse. – user2214027

Questions connexes