多对多关系在Entity Framework中不起作用

时间:2014-09-19 04:19:00

标签: c# entity-framework sql-server-2008

我正在处理WCF服务,我想在其中返回用户对象(Rolename,Userid,EmailId,密码,用户名等...),我想根据需要在我的表中存储数据。

这些是我的SQL Server 2008表:

  • UserMasterUserId, Username等....
  • RoleMasterRoleid, RoleName
  • UserInRoleUserId, RoleId

现在,当我为这些表创建edmx文件(数据库第一实体框架)时,在我的edmx文件中,即上下文文件中没有userinrole的dbset,因为没有userinrole的类文件。

但我没有使用edmx文件,因为我们无法为序列化编写Datamember Keyword,因为我在json中返回结果。我已经创建了所有类文件。

我的类文件结构如下:

[DataContract]
public class UserDetails
{
   [DataMember]
   public int Id { get; set; }
           .
           .
   public virtual ICollection<RoleMaster> RoleMasters { get; set; }
}

[DataContract]
public class RoleMaster
{
    [DataMember]
    public int Id { get; set; }
        .
        .
}

[DataContract]
public class UserInRole
{
   [DataMember]
   public int UserId { get; set; }

   [DataMember]
   public int RoleId { get; set; }

   public virtual UserDetails UserDetails { get; set; }
   public virtual RoleMaster RoleMaster { get; set; }
}

我想在userdetails表中获取那些电子邮件和密码匹配的用户的角色。

这是我的疑问:

 var user = context.UserDetails.Where(u => u.Username == "john" && u.Password == "123").FirstOrDefault();

这是我流利的api:

 modelBuilder.Entity<UserDetails>()
            .HasMany(i => i.RoleMasters)
            .WithMany(u => u.UserDetails)
            .Map(m =>
            {
                m.ToTable("UserInRole");
                m.MapLeftKey("UserId");
                m.MapRightKey("RoleId");
            });

这是我得到的错误:

  

在模型生成期间检测到一个或多个验证错误:

     

\ tSystem.Data.Entity.Edm.EdmEntityType :: EntityType'UserInRole'具有   没有键定义。定义此EntityType的键。   \ tSystem.Data.Entity.Edm.EdmEntitySet:EntityType:EntitySet   'UserInRole'基于类型'UserInRole',没有定义键。

有人可以告诉我这个问题吗?

我是否需要在流畅的api中指定所有主键?

0 个答案:

没有答案