私が取り組んでいるサイトには、ユーザーとサイトの概念があります。ユーザーはグローバル サイトに参加し、(www.globalsite.com/minisite) 内にミニ サイトを作成できます。ユーザーは、他のユーザーが作成した他のミニ サイトをフォローすることもできます。Twitter で、1 つの資格情報セットで参加して、@personal 用、@business 用などの別のアカウントを作成できるとします。
私は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 に SiteFolling_UserFollowing という名前の関係テーブルを SiteId と UserId で作成することを期待していましたが、SiteId(PK) と UserId(FK) で Site_User テーブル、Following_Id(PK) と Site_Id(FK) で Follow_Site、Following_User を作成しました。次の_Id(PK) と User_Id(FK) を持つテーブル。
どんなガイダンスも素晴らしいでしょう、ありがとう!