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");