есть много вопросов об этой проблеме, но я не мог решить свое дело. может кто-нибудь взглянуть на это:
У меня есть таблица Office
, которая имеет отношение "один-много" с таблицами Doctor
и Secretary
. Обе последние таблицы производятся из таблицы Employee
, которая имеет отношение общего первичного ключа с предопределенной таблицей Users
, созданной sqlmembershipprovider
. Кажется, существует много-много отношений между таблицей Users
и таблицей Roles
, в которой у меня нет никакой руки.
Моя проблема заключалась в создании отношения (zero, one) - (one) между моей таблицей Employee
и таблицей Users
, которую я закончил с общей связью первичных ключей между ними и возникшей ошибкой. (Есть ли лучшее решение для этой проблемы?)
Вот ошибка:
Представление ограничения FOREIGN KEY 'FK_dbo.aspnet_UsersInRoles_dbo.aspnet_Users_UserId' в таблице 'aspnet_UsersInRoles' может вызывать циклы или несколько каскадных путей. Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION или измените другие Ограничения FOREIGN KEY. Не удалось создать ограничение. См. Предыдущие ошибки.
Вот мои коды и коды членства после обратной инженерии:
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; }
}
EDIT:, и отношения идут глубже, между таблицей Users
и таблицей Applications
существует много-одна связь, также между Roles
и Applications
.