C# 如何在Entity Framework 6中使用Fluent API映射一对多对象的列表,而不使用外键属性?

C# 如何在Entity Framework 6中使用Fluent API映射一对多对象的列表,而不使用外键属性?,c#,entity-framework,fluent-entity-framework,C#,Entity Framework,Fluent Entity Framework,我有以下类(我无法更新、添加属性或添加注释): 公共类批准规则集 { 公共Guid Id{get;set;} 公共列表批准规则{get;受保护的内部集;} } 公共类批准规则 { 公共Guid Id{get;set;} 公共字符串值{get;受保护的内部集;} } 我正在尝试使用EntityFramework6编写一些流畅的API代码,以将它们映射到两个表 这是ApprovalRule配置: public class ApprovalRuleEntityConfiguration : Enti

我有以下类(我无法更新、添加属性或添加注释):

公共类批准规则集
{
公共Guid Id{get;set;}
公共列表批准规则{get;受保护的内部集;}
}
公共类批准规则
{
公共Guid Id{get;set;}
公共字符串值{get;受保护的内部集;}
}
我正在尝试使用EntityFramework6编写一些流畅的API代码,以将它们映射到两个表

这是ApprovalRule配置:

public class ApprovalRuleEntityConfiguration : EntityTypeConfiguration<ApprovalRule>
{
    public ApprovalRuleEntityConfiguration()
    {
        HasKey(x => x.Id);
        Property(x => x.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
        Property(x => x.Value).IsRequired().HasMaxLength(450);
    }
}
公共类ApprovalRuleEntityConfiguration:EntityTypeConfiguration
{
公共批准规则实体配置()
{
HasKey(x=>x.Id);
属性(x=>x.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
属性(x=>x.Value).IsRequired().HasMaxLength(450);
}
}
到目前为止,我已经:

public class ApprovalRulesetEntityConfiguration : EntityTypeConfiguration<ApprovalRuleset>
{
    public ApprovalRulesetEntityConfiguration()
    {
        HasKey(x => x.Id);
        Property(x => x.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
        HasMany(x => x.ApprovalRules);
    }
}
公共类ApprovalRulesetEntityConfiguration:EntityTypeConfiguration
{
公共批准规则集实体配置()
{
HasKey(x=>x.Id);
属性(x=>x.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
有许多(x=>x.ApprovalRules);
}
}
带有列的表“ApprovalRules”上的外键 无法创建“ApprovalRuleset_Id”,因为主密钥无效 无法确定列。使用AddForeignKey fluent API 完全指定外键

公共类ApprovalRulesetEntityConfiguration:EntityTypeConfiguration
{
公共批准规则集实体配置()
{
HasKey(x=>x.Id);
属性(x=>x.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
HasRequired(x=>x.ApprovalRules)
.有很多
.HasForeignKey(x=>x.Id);
}
}
多重性与角色中的引用约束冲突 关系中的“ApprovalRuleset\u ApprovalRules\u Target” “ApprovalRuleset_ApprovalRules”。因为 从属角色不可为null,是主角色的多重性 必须是“1”


我错过了什么?我花了很长时间搜索stack overflow和google。

您需要在ApprovalRule类中添加两个属性。那么映射将是这样的-

public class ApprovalRuleset
{
    public Guid Id { get; set; }
    public List<ApprovalRule> ApprovalRules { get; protected internal set; }
}

public class ApprovalRule
{
    public Guid Id { get; set; }
    public string Value { get; protected internal set; }

    public int ApprovalRulesetId { get; set; }
    public virtual ApprovalRuleset ApprovalRuleset { get; set; }
}

public class ApprovalRulesetEntityConfiguration : EntityTypeConfiguration<ApprovalRuleset>
{
    public ApprovalRulesetEntityConfiguration()
    {
        HasKey(t => t.Id);
    }
}

public class ApprovalRuleEntityConfiguration : EntityTypeConfiguration<ApprovalRule>
{
    public ApprovalRuleEntityConfiguration()
    {
        HasKey(t => t.Id);

        /*Property(t => t.Value)
            .HasMaxLength(100);*/

        HasRequired(t => t.ApprovalRuleset)
            .WithMany(t => t.ApprovalRules)
            .HasForeignKey(d => d.ApprovalRulesetId);
    }
}
公共类批准规则集
{
公共Guid Id{get;set;}
公共列表批准规则{get;受保护的内部集;}
}
公共类批准规则
{
公共Guid Id{get;set;}
公共字符串值{get;受保护的内部集;}
public int ApprovalRulesetId{get;set;}
公共虚拟ApprovalRuleset ApprovalRuleset{get;set;}
}
公共类ApprovalRulesetEntityConfiguration:EntityTypeConfiguration
{
公共批准规则集实体配置()
{
HasKey(t=>t.Id);
}
}
公共类ApprovalRuleEntityConfiguration:EntityTypeConfiguration
{
公共批准规则实体配置()
{
HasKey(t=>t.Id);
/*属性(t=>t.Value)
.HasMaxLength(100)*/
HasRequired(t=>t.ApprovalRuleset)
.WithMany(t=>t.ApprovalRules)
.HasForeignKey(d=>d.ApprovalRulesetId);
}
}

我无法更新批准规则或规则集类。您还有其他想法吗?如果您在
ApprovalRule
类中没有
ApprovalRulesetId
属性,则无法在实体框架中建立两个类之间的关系。周围没有工作;您甚至不能像这样手动设置它们-
从db.ApprovalRuleset中的s加入r在db.ApprovalRule中r.Id等于s.ApprovalRulesetId,其中s.Id==1选择s
HasMany(x=>x.ApprovalRules)
是正确的配置,尽管按照惯例,没有它的事件您应该得到您想要的。您能同时显示
ApprovalRule
配置吗?如果我有一个空数据库,它可以运行HasMany(x=>x.ApprovalRules)
public class ApprovalRulesetEntityConfiguration : EntityTypeConfiguration<ApprovalRuleset>
{
    public ApprovalRulesetEntityConfiguration()
    {
        HasKey(x => x.Id);
        Property(x => x.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
        HasRequired(x => x.ApprovalRules)
            .WithMany()
            .HasForeignKey(x => x.Id);
    }
}
public class ApprovalRuleset
{
    public Guid Id { get; set; }
    public List<ApprovalRule> ApprovalRules { get; protected internal set; }
}

public class ApprovalRule
{
    public Guid Id { get; set; }
    public string Value { get; protected internal set; }

    public int ApprovalRulesetId { get; set; }
    public virtual ApprovalRuleset ApprovalRuleset { get; set; }
}

public class ApprovalRulesetEntityConfiguration : EntityTypeConfiguration<ApprovalRuleset>
{
    public ApprovalRulesetEntityConfiguration()
    {
        HasKey(t => t.Id);
    }
}

public class ApprovalRuleEntityConfiguration : EntityTypeConfiguration<ApprovalRule>
{
    public ApprovalRuleEntityConfiguration()
    {
        HasKey(t => t.Id);

        /*Property(t => t.Value)
            .HasMaxLength(100);*/

        HasRequired(t => t.ApprovalRuleset)
            .WithMany(t => t.ApprovalRules)
            .HasForeignKey(d => d.ApprovalRulesetId);
    }
}