Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有列表成员的种子实体框架模型_C#_Entity Framework - Fatal编程技术网

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

C# 具有列表成员的种子实体框架模型,c#,entity-framework,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; } } 如何将功能初始化为文字列表?将其初始化为枚举列表 var

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

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

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

将其初始化为枚举列表

 var model = new MyModel
        {
            Id = 1,
            Name = "Test Name",
            Points = 2,
            Features = new List<Feature>
            {
                Feature.Feature1,
                Feature.Feature2
            }
        };
var模型=新的MyModel
{
Id=1,
Name=“测试名称”,
点数=2,
功能=新列表
{
功能1,
特色1.特色2
}
};
如何将功能初始化为文字列表

更新
正如@Gert非常正确地指出的,您不能在EF数据库中直接使用枚举(噢,drats)

但是,
enum
int
表示,因此仍然可以使用类将值存储在数据库中

您需要创建一个类来将值存储在数据库中,然后才能从
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
添加到“代码优先”模型中,以便您可以从数据库中访问它。类似于
公共DbSet功能{get;set;}
的东西就可以了

手动将值添加到数据库中可能是个好主意,这样您就知道它们的ID将匹配枚举的
int
值*您可以使用
Seed()
方法中的
AddOrUpdate
来完成此操作,然后当您需要添加更多内容时,可以将它们添加到下面*

您需要从数据库返回所需的
功能
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
对象的代码中,您可以初始化
列表
,传入您在上面拉出的所需
功能
对象:

var model = new MyModel
{
    Id = 1,
    Name = "Test Name",
    Points = 2,
    Features = new List<Feature>
               {
                   featureOne,
                   featureTwo,
                   featureThree
                }
}
var模型=新的MyModel
{
Id=1,
Name=“测试名称”,
点数=2,
功能=新列表
{
特色一,,
特点二,,
羽毛树
}
}
显然,我不知道您的
功能中有什么值,但上面只是一个示例

希望这有帮助!:)

static void Main(字符串[]args)
{
MyModel mm=新的MyModel();
mm.Id=1;
mm.Name=“user3728304”;
mm.点=1;
mm.Features=新列表{Feature.one,
二,,
特征3};
Console.Read();
}

看到答案(到目前为止),似乎没有人注意到您无法在数据库中存储
列表。想想看,目标数据库字段应该具有哪种数据类型
Feature
必须是一个类,映射到它自己的表。可能重复:感谢@GertArnold-为我完成业余时间,忘记了实体框架中的
enum
s。我在下面更新了我的答案,现在应该可以解决OP的问题:)错了<代码>列表
无法存储在数据库中。@GertArnold您可以将其存储在不同的表中,例如使用模型id和特征的“模型”特征bu、“一对多”关系b\w模型和特征。是的,但您的答案没有错<代码>列表
无法存储在数据库中。如何在
MyModel
种子中使用
功能
?我使用
context.Features.AddOrUpdate
在种子中添加
Feature
对象。然后我执行
context.SaveChanges()
,然后执行
context.MyModel.AddOrUpdate
,我将其传递给
newmymodel{…,Features=newlist{context.Features.Single(x=>x.Type==typesofeature.One)}
。问题是,当我从
context
中抓取
MyModel
对象时,它们有一个空的
Features
列表。您试图使用
MyModel.Features
的确切位置是哪里,并得到了这个问题?你在写什么类型的程序(应用程序、MVC等)?
功能是空的还是空的?
null
?我有一个控制台应用程序,我在其中添加了实体框架。从我的main方法中,我创建了一个上下文并通过执行
var firstMyModel=context.MyModel.First()
来获取一个对象。问题是
firstMyModel.Features
null
您是否通过调试器或控制台窗口的输出找到了它?不经意间(我在手机上,所以空间有点有限):您可能想将您的
功能声明为导航属性。一个快速的谷歌将向你展示这一点。我可能建议研究EF中的延迟加载/渴望加载,以及如何使用它。您还可以使用显式加载。例如:在执行查询以选择
MyModel
对象的位置,使用
context.MyModels.Include(x=>x.Features)
从数据库中获取对象。您需要使用System.Data.Entity包含
位于代码顶部。
var model = new MyModel
{
    Id = 1,
    Name = "Test Name",
    Points = 2,
    Features = new List<Feature>
               {
                   featureOne,
                   featureTwo,
                   featureThree
                }
}
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();
    }