。Net中为DbContext配置实体时,如何表示具有单向关系的对象的集合?

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

我正在为实体框架进行对象配置,其中对象A具有一个ICollection,而对象B与该对象没有任何关系。我将如何配置呢?

这是我的对象设置的示例

public class A {
    public string id { get; set; }
    public ICollection<B> itemsILike { get; set;}
}

public class B {
    public string id { get; set; }
}

B完全不需要了解A,但是我希望A拥有可以添加或删除B的列表(也可以为空)

这是我目前拥有的,但是我认为这不会建立正确的关系

public void Configure(EntityTypeBuilder<A> builder)
        {
            builder.HasKey(e => e.id);

            builder.HasMany(e => e.itemsILike);
        }

public void Configure(EntityTypeBuilder<B> builder)
        {
            builder.HasKey(e => e.id);
        }

关于如何配置的任何想法?

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

为了存储有关哪些B属于A的信息,数据库需要将该信息存储在某个地方。没有它,当您检索B的记录时将无法确定要返回的A

这可以通过aId上的外键B或与至少包含aIdbId的中间/联接表进行多对多关系。


也可以选择将Bs的集合存储在A的列中,并在代码中反序列化。一个示例是将以逗号分隔的ID列表存储为单个字符串,然后添加对数据进行反序列化的访问属性/函数。对于复杂类型,可以使用json

[请注意,我不主张存储json,但是如果您不能/不希望将关系存储为B的列,则可能是一种解决方案。


顺便说一句。对于EF Core,您可能需要查看其中提到的No Foreign Key Property和阴影属性。

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