Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 重写多对多关系的代码优先命名约定_C#_Entity Framework_Many To Many - Fatal编程技术网

C# 重写多对多关系的代码优先命名约定

C# 重写多对多关系的代码优先命名约定,c#,entity-framework,many-to-many,C#,Entity Framework,Many To Many,我有两个具有多对多关系的实体,它们不遵循代码优先命名约定,我必须找到一种方法来覆盖它 第一实体: public class User { public int UserId { get; set; } public string Username { get; set; } public virtual ICollection<Rule> { get; set; } } 我拥有的映射表有: public class UserTable : EntityT

我有两个具有多对多关系的实体,它们不遵循代码优先命名约定,我必须找到一种方法来覆盖它

第一实体:

public class User  
{
    public int UserId { get; set; }
    public string Username { get; set; }
    public virtual ICollection<Rule> { get; set; }
}
我拥有的映射表有:

public class UserTable : EntityTypeConfiguration<User>
{
    public UserProfileTable()
    {
        Property(x => x.UserId).HasColumnName("UserId").HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
        HasMany(x => x.SecurityRules)
            .WithMany(x => x.UserProfiles)
            .Map(map =>
            {
                map.MapRightKey("UserId");
                map.MapRightKey("RuleId");
                map.ToTable("UserRule");
            });
        ToTable("User");
    }
}
以及:

public class RuleTable : EntityTypeConfiguration<Rule>
{
    public RuleTable()
    {
        Property(x => x.RuleId).HasColumnName("RuleId").HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
        HasKey(x => x.RuleId);
        ToTable("Rule");
    }
}
exec sp_executesql N'
SELECT 
    [Extent2].[RuleId] AS [RuleId], 
    [Extent2].[Description] AS [Description]
FROM  
    [dbo].[UserRule] AS [Extent1]
INNER JOIN 
    [dbo].[Rule] AS [Extent2] ON [Extent1].[RuleId] = [Extent2].[RuleId]
WHERE 
    [Extent1].[User_UserId] = @EntityKeyValue1',N'@EntityKeyValue1 int',@EntityKeyValue1=37
现在,在第二个请求中,我无法找到仅在
UserRule
表中使用“
UserId
”的方法

我怎样才能做到这一点

(编辑) 我尝试删除以下3个约定,但到目前为止没有任何改变:

builder.Conventions.Remove<PluralizingEntitySetNameConvention>();
builder.Conventions.Remove<NavigationPropertyNameForeignKeyDiscoveryConvention>();
builder.Conventions.Remove<TypeNameForeignKeyDiscoveryConvention>();
builder.Conventions.Remove();
builder.Conventions.Remove();
builder.Conventions.Remove();

您的代码是完全复制的还是伪代码

粘贴你的代码,我得到了同样的结果-

但是,您要映射映射表的右侧部分两次:

map.MapRightKey("UserId");
map.MapRightKey("RuleId");
我将top命令更改为映射到左键

map.MapLeftKey("UserId");
map.MapRightKey("RuleId");

帮我修好了。

哦,天哪。。。我今天多傻啊。。。这就解决了!
builder.Conventions.Remove<PluralizingEntitySetNameConvention>();
builder.Conventions.Remove<NavigationPropertyNameForeignKeyDiscoveryConvention>();
builder.Conventions.Remove<TypeNameForeignKeyDiscoveryConvention>();
map.MapRightKey("UserId");
map.MapRightKey("RuleId");
map.MapLeftKey("UserId");
map.MapRightKey("RuleId");