この問題についてはたくさんの質問がありますが、私は自分のケースを解決できませんでした。誰かがこれを見てください:
とテーブルとの関係が1対多のテーブルOffice
があります。最後のテーブルは両方とも、によって作成された事前定義されたテーブルと共有主キーの関係を持つテーブルから派生しています。テーブルとテーブルの間には、私が手がけていない多くの関係があるようです。Doctor
Secretary
Employee
Users
sqlmembershipprovider
Users
Roles
Employee
私の問題は、テーブルとそのテーブルの間に(zero、one)-(one)関係を作成することでしたUsers
。これは、それらの間の共有主キー関係で終了し、エラーが発生しました。(その問題に対するより良い解決策はありますか?)
ここにエラーがあります:
テーブル'aspnet_UsersInRoles'にFOREIGNKEY制約'FK_dbo.aspnet_UsersInRoles_dbo.aspnet_Users_UserId'を導入すると、サイクルまたは複数のカスケードパスが発生する可能性があります。ON DELETENOACTIONまたはONUPDATENO ACTIONを指定するか、他のFOREIGNKEY制約を変更します。制約を作成できませんでした。以前のエラーを参照してください。
リバースエンジニアリング後の私のコードとメンバーシップコードは次のとおりです。
public class Office
{
public Office()
{
this.Doctors = new HashSet<Doctor>();
this.Secretaries = new HashSet<Secretary>();
}
[Key]
public System.Guid OfficeId { get; set; }
public virtual ICollection<Doctor> Doctors { get; set; }
public virtual ICollection<Secretary> Secretaries { get; set; }
}
public class Employee
{
[Key, ForeignKey("User")]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public System.Guid Id { get; set; }
public string Name { get; set; }
[ForeignKey("Office")]
public System.Guid OfficeId { get; set; }
// shared primary key
public virtual aspnet_Users User { get; set; }
public virtual Office Office { get; set; }
}
public class Doctor :Employee
{
public Doctor()
{
this.Expertises = new HashSet<Expertise>();
}
//the rest..
public virtual ICollection<Expertise> Expertises { get; set; }
}
public class Secretary : Employee
{
// blah blah
}
public class aspnet_Users
{
public aspnet_Users()
{
this.aspnet_Roles = new List<aspnet_Roles>();
}
public System.Guid ApplicationId { get; set; }
public System.Guid UserId { get; set; }
//the rest..
public virtual aspnet_Applications aspnet_Applications { get; set; }
public virtual ICollection<aspnet_Roles> aspnet_Roles { get; set; }
}
public class aspnet_Roles
{
public aspnet_Roles()
{
this.aspnet_Users = new List<aspnet_Users>();
}
public System.Guid ApplicationId { get; set; }
public System.Guid RoleId { get; set; }
//the rest..
public virtual aspnet_Applications aspnet_Applications { get; set; }
public virtual ICollection<aspnet_Users> aspnet_Users { get; set; }
}
編集:Users
そして関係はより深くなり、テーブルとApplications
テーブルの間、そしてまたの間にも多対一の関係がRoles
ありApplications
ます。