0

我有一个带有数据库优先实体框架的 mvc 项目。在项目中,我有 3 张桌子。

用户 >>> UsersInRoles <<< 具有多对多关系的角色。

下面是我的 CreateUser 代码;

public bool CreateUser(string email, string password, string birthday,string firstname,string lastname)
    {
        bool result;
        var dogumgunu = Convert.ToDateTime(birthday);
        var sifre = FormsAuthentication.HashPasswordForStoringInConfigFile(password, "sha1");
        var confirmation = CreateConfirmationToken(email);
            try
            {
                var user = new User
                {
                    UserName = email,
                    Password = sifre,
                    UserJoinDate = DateTime.Now,
                    UserBirthDay = dogumgunu,
                    UserConfirmationToken = confirmation,
                    UserID = Guid.NewGuid(),
                    MemberFirstName = firstname,
                    MemberLastName = lastname
                };
                var role = new Role
                {
                    RoleName = "Client"
                };
                user.Roles.Add(role); //problem is here!!!!!!!!!
                _bb.Users.AddObject(user);
                _bb.SaveChanges();
                result = true;
            }
            catch (Exception)
            {

                result = false;
            }


        return result;
    }

在这段代码中,我是新用户创建的。我正在添加一个角色。但是此代码在角色表中包含一个新角色。我不想这样。我只想在 UsersInRoles 表中添加一个新用户。怎么了?谢谢您的回复。

4

1 回答 1

0

交换这两行:

_bb.Users.AddObject(user);
user.Roles.Add(role);

因为AddObject将整个对象图转换为Added状态。如果之后添加角色,其状态将保持不变Unchanged

并且您应该首先从数据库中获取角色或创建一个Role仅具有现有RoleId. (所谓的存根实体)。

所以代替new Role你可以做

var role = _bb.Roles.Single(r => r.RoleName == "Client");
于 2013-05-28T08:38:07.227 回答