Сайт, над которым я работаю, имеет концепцию пользователя и сайта.Пользователь может присоединиться к глобальному сайту и создать мини-сайты (www.globalsite.com/minisite).Пользователи также могут следить за другими мини-сайтами, созданными другими пользователями.Подумайте об этом, как если бы Twitter позволил вам присоединиться к одному набору учетных данных и создать разные учетные записи, одну для @ личного использования, @ делового использования и т. Д.
Я использую EF CTP4 и сначала использую код.Я просто не уверен, правильно ли я проектирую свою модель.
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; }
....
}
А вот мои сопоставления:
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");
}
}
Это правильно или должно быть смоделировано по-другому?Раньше я отображал отношения вручную с помощью синтаксиса:
Relationship(u => u.SitesFollowing).FromProperty(s => s.UsersFolling);
, но теперь, когда я обновился до CPT4, он больше не работает.Я ожидал, что EF создаст одну таблицу взаимосвязей в БД с именем SiteFolling_UserFollowing с SiteId и UserId, но он создал таблицу Site_User с SiteId (PK) и UserId (FK), Follow_Site с Follow_Id (PK) и Site_Id (FK) и Follow_Userтаблица с Follow_Id (PK) и User_Id (FK).
Любое руководство было бы здорово, спасибо!