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

时间:2016-06-25 21:38:09

标签: c# entity-framework

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

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是枚举。

我的配置中有一个Seed()方法,其中包含一个对象文字:

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

如何将功能初始化为文字列表?

3 个答案:

答案 0 :(得分:1)

  

如何将功能初始化为文字列表?

<强>更新
正如@Gert正确指出的那样,你不能直接在EF数据库中使用枚举(哦,drats)

但是,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将与枚举的int值匹配。 * 可以使用AddOrUpdate方法中的Seed()执行此操作 - 然后当您需要添加更多内容时,可以将它们添加到*

之下

您需要从数据库返回所需的Feature,然后将它们分配给您的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中有什么价值,但上面只是一个例子。

希望这有帮助! :)

答案 1 :(得分:0)

将其初始化为枚举列表

 var model = new MyModel
        {
            Id = 1,
            Name = "Test Name",
            Points = 2,
            Features = new List<Feature>
            {
                Feature.Feature1,
                Feature.Feature2
            }
        };

答案 2 :(得分:0)

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();
    }