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