实体框架 - 将一个类映射到具有多对一关系的两个表

问题描述 投票:1回答:1

我有一个代表页面和标签连接的类,它看起来或多或少像这样:

public class TagLink {
    [Key]
    public int Id { get; set; }

    public int PageId { get; set; }

    public int TagId { get; set; }

    public string TagName { get; set; }
}

在我的数据库中,我想有两个表:TagLinksTagNames。第一个是IdPageIdTagId,第二个是TagIdTagName

我希望标签ID是外键,因此可以将许多标签链接分配给单个标签名称。

我用EntityTypeConfiguration试了一下,但我不知道如何正确配置它。它给了我错误的外键,它们是这样构建的:

ALTER TABLE [dbo].[TagNames]  WITH CHECK ADD  CONSTRAINT [FK_dbo.TagNames_dbo.TagLinks_TagId] FOREIGN KEY([TagId])
REFERENCES [dbo].[TagLinks] ([TagId]);

ALTER TABLE [dbo].[TagNames] CHECK CONSTRAINT [FK_dbo.TagNames_dbo.TagLinks_TagId]

我从这开始:

public class TagLinkEntityConfiguration : EntityTypeConfiguration<TagLink>
{
    public TagLinkEntityConfiguration()
    {
        HasKey(e => e.Id);
        HasKey(e => e.TagId);

        Property(e => e.Id).HasColumnName(nameof(TagLink.Id));
        Property(e => e.PageId).HasColumnName(nameof(TagLink.PageId));           
        Property(e => e.TagId).HasColumnName(nameof(TagLink.TagId));
        Property(e => e.TagName).HasColumnName(nameof(TagLink.TagName));

        Map(m =>
        {
            m.Properties(e => new
            {
                e.Id,
                e.PageId,                    
                e.TagId
            });
            m.ToTable("TagLinks");
        });

        Map(m =>
        {
            m.Properties(e => new
            {
                e.TagId,
                e.TagName
            });
            m.ToTable("TagNames");
        });
    }
}

如何使它与多对一关系一起使用?我想应该在TagLinks表上添加外键以引用TagId表中的TagNames

c# .net entity-framework
1个回答
0
投票

尝试一下:

public class TagLink {
    [Key]
    public int Id { get; set; }

    public int PageId { get; set; }

    public int TagId { get; set; }

    public Tag Tag { get; set; }
}

public class Tag {
    [Key]
    public int Id { get; set; }

    public string Name { get; set; }

    public virtual ICollection<TagLink> TagLinks { get; set; }
}

跳过TagLinkEntityConfiguration定义,让EF的代码优先约定接管并为您解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.