实验直接上代码,看结果
实体类
[Flags]publicenumFlagsEnum
{
Day=1,
Night=2}publicclassEntityWithEnum
{publicintID {get;set; }publicFlagsEnum ValidTime {get;set; }
}
数据库上下文
publicpartialclassCodeFirstModel : DbContext
{publicCodeFirstModel()
:base("name=CodeFirstModel")
{
}publicvirtualDbSet<EntityWithEnum> EntityWithEnum {get;set; }
}
Sql server LocalDb的连接字符串
<connectionStrings><addname="CodeFirstModel"connectionString="data source=(LocalDb)\MSSQLLocalDb;initial catalog=TestDb;integrated security=True;multipleactiveresultsets=True;applicationname=EntityFramework"PRoviderName="System.Data.SqlClient"/></connectionStrings>
主函数
staticvoidMain(string[] args)
{//CreateDatabaseIfNotExists//DropCreateDatabaseIfModelChanges//DropCreateDatabaseAlwaysDatabase.SetInitializer(newDropCreateDatabaseIfModelChanges<CodeFirstModel>());using(varcontext =newCodeFirstModel())
{
context.Database.Initialize(true);
}using(CodeFirstModel db =newCodeFirstModel())
{
EntityWithEnum entity=newEntityWithEnum() { ValidTime =FlagsEnum.Day };
db.EntityWithEnum.Add(entity);
entity=newEntityWithEnum() { ValidTime =FlagsEnum.Night };
db.EntityWithEnum.Add(entity);
entity=newEntityWithEnum() { ValidTime = FlagsEnum.Night|FlagsEnum.Day };
db.EntityWithEnum.Add(entity);
db.SaveChanges();
Console.WriteLine("{0}:\t{1}", entity.ID, entity.ValidTime);
Console.WriteLine("-------------------");varentitys =fromeindb.EntityWithEnumwheree.ValidTime.HasFlag(FlagsEnum.Day)selecte;foreach(variteminentitys)
{
Console.WriteLine("{0}:\t{1}", item.ID, item.ValidTime);
}
}
Console.ReadKey(true);
}
运行结果
结论Entity Framework 6.0 的 LINQ 是可以直接写 枚举的 HasFlags 方法的.
Add 的实体在 数据库保存后,会将数据库生成好的主键读出来.不用再写LINQ 再查一遍了.