我有一个带有列表成员的实体框架模型:
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 = ???
}
如何将功能初始化为文字列表?
答案 0 :(得分:1)
如何将功能初始化为文字列表?
<强>更新强>
正如@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<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();
}