Le site sur lequel je travaille a le concept d'utilisateur et de site. Un utilisateur peut rejoindre le site global et créer des mini-sites (www.globalsite.com/minisite). Les utilisateurs peuvent également suivre d'autres mini-sites créés par d'autres utilisateurs. Pensez-y comme si Twitter vous permettait de joindre un ensemble d'identifiants et de créer des comptes différents, un pour l'utilisation personnelle, l'utilisation @business etc.Modélisation de domaine Question
J'utilise EF CTP4 et j'utilise d'abord le code. Je ne suis pas sûr si je conçois mon modèle correctement.
public class User : IEntity
{
public virtual ICollection<Site> Sites{ get; set; }
public virtual ICollection<Site> Following{ get; set; }
....
}
public class Site: IEntity
{
public virtual User User{ get; set; }
public virtual ICollection<User> Following{ get; set; }
....
}
Et ici me sont des applications:
public class UserMap : EntityConfiguration<User>
{
public UserMap()
{
HasKey(u => u.Id);
Property(u => u.Id).IsIdentity();
Property(u => u.Name).IsRequired().IsVariableLength().HasMaxLength(75);
Property(u => u.Email).IsRequired().IsVariableLength().HasMaxLength(75);
Property(u => u.PasswordHash).IsRequired().IsVariableLength().HasMaxLength(215);
Property(u => u.PasswordSalt).IsRequired().IsVariableLength().HasMaxLength(88);
Property(u => u.IsConfirmed);
Property(u => u.LastActivityAt);
Property(u => u.CreatedAt);
Property(u => u.InternalRole);
MapSingleType(u => new
{
u.Id,
u.Name,
u.Email,
u.PasswordHash,
u.PasswordSalt,
u.IsConfirmed,
Role = u.InternalRole,
u.LastActivityAt,
u.CreatedAt
}).ToTable("User");
}
}
public class SiteMap : EntityConfiguration<Site>
{
public SiteMap()
{
HasKey(s => s.Id);
Property(s => s.Id).IsIdentity();
Property(s => s.HasDonationPage);
Property(s => s.IsActive);
Property(s => s.IsAdminRestricted);
Property(s => s.IsPrivate);
Property(s => s.Slug).IsRequired().IsVariableLength().HasMaxLength(125);
Property(s => s.CreatedAt);
MapSingleType(s => new
{
s.Id,
UserId = s.User.Id,
ThemeId = s.Theme.Id,
s.HasDonationPage,
s.IsActive,
s.IsAdminRestricted,
s.IsPrivate,
s.Slug,
s.CreatedAt
}).ToTable("Sites");
}
}
Est-ce exact ou devrait-il être modelés différemment? Je l'habitude d'avoir les relations mappées manuellement avec le:
Relationship(u => u.SitesFollowing).FromProperty(s => s.UsersFolling);
syntaxe
, mais maintenant que je l'ai mis à jour à CPT4, qui ne fonctionne plus. Je m'attendais à ce que EF crée une table de relation dans la base de données appelée SiteFolling_UserFollowing avec un SiteId et UserId mais elle a créé une table Site_User avec SiteId (PK) et UserId (FK), un Follow_Site avec Follow_Id (PK) et Site_Id (FK) et un Follow_User table avec Following_Id (PK) et User_Id (FK).
Toute orientation serait grande, merci!
Pouvez-vous publier vos correspondances actuelles? – TheCloudlessSky
@TheCloudlessSky - J'ai ajouté le code de mappage, des idées? – Paul