我正在为实体框架进行对象配置,其中对象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);
}
关于如何配置的任何想法?
为了存储有关哪些B
属于A
的信息,数据库需要将该信息存储在某个地方。没有它,当您检索B
的记录时将无法确定要返回的A
。
这可以通过aId
上的外键B
或与至少包含aId
和bId
的中间/联接表进行多对多关系。
也可以选择将Bs
的集合存储在A
的列中,并在代码中反序列化。一个示例是将以逗号分隔的ID列表存储为单个字符串,然后添加对数据进行反序列化的访问属性/函数。对于复杂类型,可以使用json
。
[请注意,我不主张存储json,但是如果您不能/不希望将关系存储为B
的列,则可能是一种解决方案。
顺便说一句。对于EF Core,您可能需要查看其中提到的No Foreign Key Property和阴影属性。