带有列表成员的种子实体框架模型
本文关键字:实体 框架 模型 种子 列表 成员 | 更新日期: 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数据库(哦,糟了)中直接使用枚举。
但是,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将与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();
}