带有列表成员的种子实体框架模型

本文关键字:实体 框架 模型 种子 列表 成员 | 更新日期: 2023-09-27 17:49:02

我有一个带有列表成员的实体框架模型:

public class MyModel
{
        public int Id { get; set; }
        public string Name { get; set; }
        public int Points { get; set; }
        public List<Feature> Features { get; set; }
}

其中Feature为enum。

我有一个Seed()方法在我的配置与对象文字:

new MyModel
{
    Id = 1,
    Name = "Test Name",
    Points = 2,
    Features = ???
}

如何将特性初始化为文字列表?

带有列表成员的种子实体框架模型

如何将特性初始化为文字列表?


正如@Gert所指出的,你不能在EF数据库(哦,糟了)中直接使用枚举。

但是,enumint表示,因此该值仍然可以通过使用类存储在数据库中。

您需要创建一个类来将值存储在数据库中,然后您可以从MyModel类中引用它。

:

public enum TypesOfFeature // The enum of features
{
    One = 1,
    Two = 2,
    Three = 3
    ... // etc.
}
public class Feature // The class to map to a table in your DB
{
    public int Id { get; set; }
    public TypesOfFeature Type { get; set; }
}

添加一个DbSet<Feature>到你的代码优先模型,这样你就可以从你的数据库访问它。比如public DbSet<Feature> Features { get; set; }就可以了。

手动将值添加到数据库中可能是一个好主意,这样您就知道它们的id将与enum的int值匹配。*你可以使用Seed()方法中的AddOrUpdate来做到这一点-然后当你需要添加更多时,你可以将它们添加到*

下面

您需要从DB返回您想要的Feature s,以便将它们分配给您的MyModel.Features属性。

一样:

Feature featureOne = YourDbContext.Features.Single(x => x.Type == TypesOfFeature.One);
Feature featureTwo = YourDbContext.Features.Single(x => x.Type == TypesOfFeature.Two);
Feature featureThree = YourDbContext.Features.Single(x => x.Type == TypesOfFeature.Three);

然后,在您初始化MyModel对象的代码中,您可以初始化List<Feature>,传入您在上面抽出的所需Feature对象:

var model = new MyModel
{
    Id = 1,
    Name = "Test Name",
    Points = 2,
    Features = new List<Feature>
               {
                   featureOne,
                   featureTwo,
                   featureThree
                }
}

显然,我不知道你在Feature enum中有什么值,但上面只是一个例子。

希望这对你有帮助!:)

初始化为enum的list

 var model = new MyModel
        {
            Id = 1,
            Name = "Test Name",
            Points = 2,
            Features = new List<Feature>
            {
                Feature.Feature1,
                Feature.Feature2
            }
        };
static void Main(string[] args)
    {
        MyModel mm = new MyModel();
        mm.Id = 1;
        mm.Name = "user3728304";
        mm.Points = 1;
        mm.Features = new List<Feature>{Feature.one,
                         Feature.two,
                         Feature.three};
        Console.Read();
    }