具有导航属性的EF6一对多流利的api

脆皮假期

我正在尝试使用EF6和fluent API为我的实体一对多应用,但始终收到此错误:

EmailTemplate_Attachments_Source_EmailTemplate_Attachments_Target::关系约束中的从属角色和主体角色中的属性数必须相同。

这些是我的模型:

public class EmailTemplate
{
    public EmailTemplate()
    {
        Attachments = new List<EmailTemplateAttachment>();
    }

    public int EmailTemplateId { get; set; }
    public int OperatorId { get; set; }
    public EmailTemplateType MailType { get; set; }
    public int LanguageId { get; set; }
    public string Subject { get; set; }
    public string Content { get; set; }
    public string FromEmail { get; set; }
    public DateTime CreationDate { get; set; }

    public virtual ICollection<EmailTemplateAttachment> Attachments { get; set; }
}

public class EmailTemplateAttachment
{
    public int EmailTemplateAttachmentId { get; set; }
    public string ShortDescription { get; set; }
    public string FilePath { get; set; }
    public int EmailTemplateId { get; set; }

    public virtual EmailTemplate EmailTemplate { get; set; }

}

这些是实体配置

public EmailTemplateConfiguration()
    {
        ToTable("T_EMAILS");

        HasKey(emailTemplate => new { emailTemplate.OperatorId, emailTemplate.MailType, emailTemplate.LanguageId });
        HasMany(t => t.Attachments)
            .WithRequired(a => a.EmailTemplate)
            .HasForeignKey(a => a.EmailTemplateId);

        Property(emailTemplate => emailTemplate.EmailTemplateId).HasColumnName("row_id")
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
        Property(emailTemplate => emailTemplate.OperatorId).HasColumnName("operator_id");
        Property(emailTemplate => emailTemplate.MailType).HasColumnName("mail_type");
        Property(emailTemplate => emailTemplate.LanguageId).HasColumnName("language_id");
        Property(emailTemplate => emailTemplate.Subject).HasColumnName("subject");
        Property(emailTemplate => emailTemplate.Content).HasColumnName("mail_content");
        Property(emailTemplate => emailTemplate.FromEmail).HasColumnName("from_email");
        Property(emailTemplate => emailTemplate.CreationDate).HasColumnName("insert_date");

    }

 public EmailTemplateAttachmentConfiguration()
    {
        ToTable("T_EMAILS_ATTACHMENTS");

        HasKey(a => a.EmailTemplateAttachmentId);
        HasRequired(a => a.EmailTemplate)
            .WithMany(t => t.Attachments)
            .HasForeignKey(a => a.EmailTemplateId);

        Property(a => a.EmailTemplateAttachmentId).HasColumnName("attachment_id")
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
        Property(a => a.ShortDescription).HasColumnName("short_description");
        Property(a => a.FilePath).HasColumnName("file_url");
        Property(a => a.EmailTemplateId).HasColumnName("mail_id");

    }

我究竟做错了什么?我已经尝试了太多等待配置外键并不断获得相同异常的尝试

潘阮

在您的EmailTemplateConfiguration中,您定义EmailTemplate的主键为复合键:

HasKey(emailTemplate => new { emailTemplate.OperatorId, emailTemplate.MailType, emailTemplate.LanguageId });

但是,在EmailTemplateAttachmentConfiguration中,您将依赖项配置为使用EmailTemplateId作为外键,这与上面定义的主键不同。外键应与主体表主键相同。

此外,您还要两次定义EmailTemplate和EmailTemplateAttachment之间的关系(在EmailTemplateConfiguration中定义一个,在EmailTemplateAttachmentConfiguration中定义一个)。多余,一个就够了

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

具有导航属性的EF6一对多流利的api

来自分类Dev

EF 6 Fluent API 具有一对多和多对多以及相互冲突的多样性

来自分类Dev

具有相同类型导航属性集合的EF6代码第一实体-如何告诉EF是什么关系?

来自分类Dev

如何使用EF6 Code First将外键属性公开给具有导航属性的现有实体

来自分类Dev

实体框架6不具有导航属性的一对多关系

来自分类Dev

实体框架6:具有导航属性的多列唯一索引

来自分类Dev

可以使用EF6将包含的导航属性嵌套在Web API中吗?

来自分类Dev

EF6代码第一个多个一对多映射问题/“多重性”错误

来自分类Dev

EF6代码第一个多个一对多映射问题/“多重性”错误

来自分类Dev

ef6 include()用于具有必需属性的可空属性

来自分类Dev

EF6中的多对多关系是否需要定义映射表并具有主键?

来自分类Dev

EF6中的多租户,其中多个模式具有相同的表

来自分类Dev

EF6不会延迟加载导航属性

来自分类Dev

EF6:在DbSet.Local中包括导航属性

来自分类Dev

阻止EF6生成导航属性

来自分类Dev

EF6不会延迟加载导航属性

来自分类Dev

EF6导航属性与单逆相同类型

来自分类Dev

如何在流利的ef核心中定义一个映射到多个一对多的共享超级类型的列表属性?

来自分类Dev

流利的NHibernate一对多映射

来自分类Dev

流利的NHibernate代码首先一对多

来自分类Dev

EF Core 无法将具有两个导航属性的实体更新为同一对象(其他实体)

来自分类Dev

具有相同实体的2个属性时的EF6代码优先混淆

来自分类Dev

EF6未在多对多上填充属性

来自分类Dev

导航属性仅在一侧具有一对多关系?

来自分类Dev

与EF6中现有表的一对多关系:ALTER TABLE语句与FOREIGN KEY约束冲突

来自分类Dev

如何为一个模型创建两个导航属性(EF6代码优先)

来自分类Dev

带有代码优先EF6的多租户

来自分类Dev

删除与EF6有多对多关系的实体记录

来自分类Dev

带有代码优先EF6的多租户

Related 相关文章

  1. 1

    具有导航属性的EF6一对多流利的api

  2. 2

    EF 6 Fluent API 具有一对多和多对多以及相互冲突的多样性

  3. 3

    具有相同类型导航属性集合的EF6代码第一实体-如何告诉EF是什么关系?

  4. 4

    如何使用EF6 Code First将外键属性公开给具有导航属性的现有实体

  5. 5

    实体框架6不具有导航属性的一对多关系

  6. 6

    实体框架6:具有导航属性的多列唯一索引

  7. 7

    可以使用EF6将包含的导航属性嵌套在Web API中吗?

  8. 8

    EF6代码第一个多个一对多映射问题/“多重性”错误

  9. 9

    EF6代码第一个多个一对多映射问题/“多重性”错误

  10. 10

    ef6 include()用于具有必需属性的可空属性

  11. 11

    EF6中的多对多关系是否需要定义映射表并具有主键?

  12. 12

    EF6中的多租户,其中多个模式具有相同的表

  13. 13

    EF6不会延迟加载导航属性

  14. 14

    EF6:在DbSet.Local中包括导航属性

  15. 15

    阻止EF6生成导航属性

  16. 16

    EF6不会延迟加载导航属性

  17. 17

    EF6导航属性与单逆相同类型

  18. 18

    如何在流利的ef核心中定义一个映射到多个一对多的共享超级类型的列表属性?

  19. 19

    流利的NHibernate一对多映射

  20. 20

    流利的NHibernate代码首先一对多

  21. 21

    EF Core 无法将具有两个导航属性的实体更新为同一对象(其他实体)

  22. 22

    具有相同实体的2个属性时的EF6代码优先混淆

  23. 23

    EF6未在多对多上填充属性

  24. 24

    导航属性仅在一侧具有一对多关系?

  25. 25

    与EF6中现有表的一对多关系:ALTER TABLE语句与FOREIGN KEY约束冲突

  26. 26

    如何为一个模型创建两个导航属性(EF6代码优先)

  27. 27

    带有代码优先EF6的多租户

  28. 28

    删除与EF6有多对多关系的实体记录

  29. 29

    带有代码优先EF6的多租户

热门标签

归档