我正在使用的網站具有用戶和網站的概念。用戶可以加入全球網站並在(www.globalsite.com/minisite)內創建小型網站。用戶也可以關注由其他用戶創建的其他迷你網站。想想看,如果Twitter允許你加入一組憑證並創建不同的帳戶,一個用於@personal use,@business use等。域模型問題
我使用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在DB中使用SiteId和UserId在名爲SiteFolling_UserFollowing的數據庫中創建一個關係表,但它使用SiteId(PK)和UserId(FK),帶有Following_Id(PK)和Site_Id(FK)的Following_Site和Following_User創建了Site_User表表與Following_Id(PK)和User_Id(FK)。
任何指導將是偉大的,謝謝!
你可以發佈你當前的映射嗎? – TheCloudlessSky 2010-08-02 00:06:17
@TheCloudlessSky - 我添加了映射代碼,有什麼想法? – Paul 2010-08-02 14:53:14