EF Code First不为ICollection <string>生成表

Liv*_*er9 14 c# asp.net-mvc entity-framework ef-code-first

我想在我的一个数据类中使用以下ICollection属性(让我们称之为"Foo")

public class Foo
{
    [Key]
    public int FooId { get; set; }
    public string SomeValueOrOther { get; set; }
    public virtual ICollection<string> AllowedBars { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我可以在使用实体上下文时添加字符串值,但它们不会"去任何地方".换句话说,没有生成表来表示此关系,因此不会保存任何值.我期望的是一个包含两列的表,一个用于"FooId",一个用于"AllowedBar",EF用于将其自动映射到集合(与复杂类型一样).

由于没有发生这种情况,我必须使用上面描述的两个属性创建一个名为"FooAllowedBar"的类.

这让我很不高兴,因为它是我在整个项目中唯一的"连接"类型.当然,它可以工作,所以一个方框被勾选,但有没有人知道如何让EF为字符串集合关系生成一个表?(或int,或datetime等)

很可能,从EF上的小信息(仍然!),这种功能尚未得到支持.我想接近一个确定的答案.

非常感谢,Rob

Lad*_*nka 17

EF只能使用实体类.每个实体类都必须具有已定义的主键,因此您的方案中的最小值为:

public class StringData
{
    public int Id { get; set; }
    public string Data { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

或者更糟

public class StringData
{
    [Key]
    public string Data { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

现在您可以定义StringData的集合以将其映射为相关表:

public virtual ICollection<StringData> AllowedBars { get; set; }
Run Code Online (Sandbox Code Playgroud)

  • 谢谢拉迪斯拉夫 - 我暗中希望你能回答......你做到了!谢啦。“EF 只能使用实体类” - 这就是我需要知道的。您认为添加此类功能可能是一个想法吗?我经常遇到需要一个简单的字符串或 int 集合作为 EF POCO 的一部分。 (2认同)