プロジェクトで ADO.NET Entity Data Model を使用して、開発中のセキュリティ/承認方法をテストしています。すべてが思いどおりに機能し、別の本番プロジェクトで動作を模倣する必要があります。
もう 1 つの製品では、Entity Framework Power Tools Beta 3 を使用して、クラス/エンティティとマッピング クラスを生成しています。これまでのところ、モデルとマッピングのみが含まれています。
Users テーブル、Roles テーブル、UsersInRoles テーブルなどがあります。
Roles と UsersInRoles の間には 1 対多の関係がありますが、Users と UsersInRoles の間には 1 対 1 の関係があります。
私はdbの関係が正しいと思います。ADOモデルはそう考えているようです:)
しかし、Power Tools で生成されたクラスを使用しているときに C# コードで db.Users を呼び出すと、次のようになります。
{"コマンド定義の実行中にエラーが発生しました。詳細については、内部例外を参照してください。"}
{"無効な列名 'Role_RoleId'."}
EF コマンド (View Entity Data Model DDL SQL) を実行すると、Role_RoleID という名前の列が表示されますが、これは正しくありません。
データベース テーブル Users に Role_RoleId はありません。また、UsersInRoles はモデル ファイルまたはマッピング ファイルでは生成されません。これを修正するにはどうすればよいですか? 私は途方に暮れています。
[...]
create table [Auth].[Users] (
[UserId] [uniqueidentifier] not null,
[UserName] [nvarchar](100) not null,
[FullUserName] [nvarchar](100) not null,
[Password] [nvarchar](150) not null,
[PasswordSalt] [nvarchar](50) not null,
[IsEnabled] [bit] not null,
[IsLockedOut] [bit] not null,
[Email] [nvarchar](150) not null,
[DateCreated] [datetime] not null,
[LastModified] [datetime] not null,
[Role_RoleId] [uniqueidentifier] null,
primary key ([UserId])
);
alter table [Auth].[Users] add constraint [User_Role] foreign key ([Role_RoleId]) references [Auth].[Roles]([RoleId]);
[...]
SQL Server テーブル
CREATE TABLE [Auth].[Users](
[UserId] [uniqueidentifier] NOT NULL,
[UserName] [nvarchar](100) NOT NULL,
[FullUserName] [nvarchar](100) NOT NULL,
[Password] [nvarchar](150) NOT NULL,
[PasswordSalt] [nvarchar](50) NOT NULL,
[IsEnabled] [bit] NOT NULL,
[IsLockedOut] [bit] NOT NULL,
[Email] [nvarchar](150) NOT NULL,
[DateCreated] [datetime2](7) NOT NULL,
[LastModified] [datetime2](7) NOT NULL,
CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED
(
[UserId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [Auth].[Roles](
[RoleId] [uniqueidentifier] NOT NULL,
[RoleName] [nvarchar](100) NOT NULL,
[Description] [nvarchar](250) NULL,
CONSTRAINT [PK_Roles] PRIMARY KEY CLUSTERED
(
[RoleId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [Auth].[UsersInRoles](
[UserId] [uniqueidentifier] NOT NULL,
[RoleId] [uniqueidentifier] NOT NULL,
CONSTRAINT [PK_UsersInRoles] PRIMARY KEY CLUSTERED
(
[UserId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [Auth].[UsersInRoles] WITH CHECK ADD CONSTRAINT [FK_UsersInRoles_Roles] FOREIGN KEY([RoleId])
REFERENCES [Auth].[Roles] ([RoleId])
ON UPDATE CASCADE
ON DELETE SET DEFAULT
GO
ALTER TABLE [Auth].[UsersInRoles] CHECK CONSTRAINT [FK_UsersInRoles_Roles]
GO
ALTER TABLE [Auth].[UsersInRoles] WITH CHECK ADD CONSTRAINT [FK_UsersInRoles_Users] FOREIGN KEY([UserId])
REFERENCES [Auth].[Users] ([UserId])
ON UPDATE CASCADE
ON DELETE CASCADE
GO
ALTER TABLE [Auth].[UsersInRoles] CHECK CONSTRAINT [FK_UsersInRoles_Users]
GO
ALTER TABLE [Auth].[UsersInRoles] ADD CONSTRAINT [DF_UsersInRoles_RoleId] DEFAULT ('8B24673F-A4FB-4031-9185-8CCBD96CBE4D') FOR [RoleId]
GO
CS ファイル
public partial class User
{
public int UserId { get; set; }
public string UserName { get; set; }
public string FullUserName { get; set; }
public string Password { get; set; }
public string PasswordSalt { get; set; }
public bool IsEnabled { get; set; }
public bool IsLockedOut { get; set; }
public string Email { get; set; }
public System.DateTime DateCreated { get; set; }
public System.DateTime LastModified { get; set; }
public virtual Role Role { get; set; }
}
public partial class Role
{
public Role()
{
this.RoleSecurables = new List<RoleSecurable>();
this.Users = new List<User>();
}
public int RoleId { get; set; }
public string RoleName { get; set; }
public string Description { get; set; }
public virtual ICollection<RoleSecurable> RoleSecurables { get; set; }
public virtual ICollection<User> Users { get; set; }
}
public UserMap()
{
// Primary Key
this.HasKey(t => t.UserId);
// Properties
this.Property(t => t.UserName)
.IsRequired()
.HasMaxLength(100);
this.Property(t => t.FullUserName)
.IsRequired()
.HasMaxLength(100);
this.Property(t => t.Password)
.IsRequired()
.HasMaxLength(150);
this.Property(t => t.PasswordSalt)
.IsRequired()
.HasMaxLength(50);
this.Property(t => t.Email)
.IsRequired()
.HasMaxLength(150);
// Table & Column Mappings
this.ToTable("Users", "Auth");
this.Property(t => t.UserId).HasColumnName("UserId");
this.Property(t => t.UserName).HasColumnName("UserName");
this.Property(t => t.FullUserName).HasColumnName("FullUserName");
this.Property(t => t.Password).HasColumnName("Password");
this.Property(t => t.PasswordSalt).HasColumnName("PasswordSalt");
this.Property(t => t.IsEnabled).HasColumnName("IsEnabled");
this.Property(t => t.IsLockedOut).HasColumnName("IsLockedOut");
this.Property(t => t.Email).HasColumnName("Email");
this.Property(t => t.DateCreated).HasColumnName("DateCreated");
this.Property(t => t.LastModified).HasColumnName("LastModified");
}
public RoleMap()
{
// Primary Key
this.HasKey(t => t.RoleId);
// Properties
this.Property(t => t.RoleName)
.IsRequired()
.HasMaxLength(100);
this.Property(t => t.Description)
.HasMaxLength(250);
// Table & Column Mappings
this.ToTable("Roles", "Auth");
this.Property(t => t.RoleId).HasColumnName("RoleId");
this.Property(t => t.RoleName).HasColumnName("RoleName");
this.Property(t => t.Description).HasColumnName("Description");
}