0

次のコードがあります。

            var roleEditionCNT = new Role { ApplicationName = "TTT", RoleName = "EDITION_CNT" };
            var roleEditionKCD = new Role { ApplicationName = "TTT", RoleName = "EDITION_KCD" };
            var roleEditionInterne = new Role { ApplicationName = "TTT", RoleName = "EDITION_INTERNE" };
            var roleConsultationInterne = new Role { ApplicationName = "TTT", RoleName = "CONSULTATION_INTERNE" };
            var roleConsultationExterne = new Role { ApplicationName = "TTT", RoleName = "CONSULTATION_EXTERNE" };
            var roleAdministrator = new Role { ApplicationName = "TTT", RoleName = "ADMINISTRATOR" };

            new List<Role>
                {
                    roleEditionCNT,
                    roleEditionKCD,
                    roleEditionInterne,
                    roleConsultationInterne,
                    roleConsultationExterne,
                    roleAdministrator
                }.ForEach(b => context.Roles.AddOrUpdate(m => m.RoleName, b));

それから私はすることができます:

var myUser = new User
      {
        Company = "DELTOY",
        FirstName = "BRYAN",
        LastName = "KENETH",
        Roles = new List<Role> { roleEditionCNT }
      };

ここで、次のようにロールを割り当てる方法を変更したいと思います。

var myUser = new User
      {
        Company = "DELTOY",
        FirstName = "BRYAN",
        LastName = "KENETH",
        Roles = new List<Role> { new Role { ApplicationName = "TTT", RoleName = "EDITION_CNT" } }
      };

このコードは正常にコンパイルされましたが、実行時にエラーが発生しました:

PRIMARY KEY 制約 'PK_Roles' に違反しています。オブジェクト 'dbo.Roles' に重複キーを挿入できません

上記のコードを変更するだけで、システムがテーブル Roles に新しいレコードを追加しようとしているように見えます。変数を使用せずに単にロールを割り当てるにはどうすればよいですか。rolename を文字列で指定することを好みます。

何か案が?

4

1 に答える 1

1

2 番目の例では、ユーザーを既存の役割に割り当てるのではなく、新しい役割を持つユーザーを追加しようとしています。追加しようとしている役割は、役割テーブルに既に存在します。

Role オブジェクトを次のような変数に取得できます。

var role = context.First(p => p.RoleName == "EDITION_CNT");

それを新しいユーザーに割り当てます。

var myUser = new User
      {
        Company = "DELTOY",
        FirstName = "BRYAN",
        LastName = "KENETH",
        Roles = new List<Role> { role } 
      };
于 2013-02-12T09:34:11.203 に答える