2013-10-13 44 views
0

模型中的问题:如何使用实体框架C#定义默认值?

public class EmployeeType 
{ 
    public int employeeTypeId { get; set; } 
    public string typeName { get; set; } 
    public virtual List<Employee> Employees { get; set; } 
} 

public class Employee 
{ 
    public int employeeId { get; set; } 
    public string userName { get; set; } 
    public string firstName { get; set; } 
    public string lastName { get; set; } 
    public string password { get; set; } 
    public int employeeTypeId { get; set; } 

    public virtual EmployeeType EmployeeTypes { get; set; } 
    public virtual List<PhoneNumber> PhoneNumbers { get; set; } 
} 

目前,我公司通过加入不同的值:

db.EmployeeType.Add(new EmployeeType 
{ 
    typeName = "Administrator" 
}); 
db.EmployeeType.Add(new EmployeeType 
{ 
    typeName = "Seller" 
}); 
db.EmployeeType.Add(new EmployeeType 
{ 
    typeName = "Accountant" 
}); 

但在当我要检查,如果用户是管理员还是等我有检查linq查询并找出id是否等于Employee表中的id。

我怎么能在EmployeeType模型中定义默认记录,而不是通过多。新增线路添加值,这样我就可以使用这样的:

if (db.Employee.FirstOrDefault(o => ...).servictypeId 
== EmployeeType.Administrator) 
{ 

} 

回答

0

来处理这将是最好的方法将employeetypeId转换为EF中的枚举。您可以通过将字段“转换”为EDMX中的枚举来轻松实现此目的。只需右键单击edmx模型设计屏幕中的属性,然后单击“convert to enum”。

首先,虽然,你需要创建一个枚举,调用的UserRole: -

enum UserRole : int 
{ 
    Administrator = 1, 
    Manager = 2, 
    Client = 3 

} 

现在,当你想使新的UserRole的你加入他们在您的枚举。

当涉及到添加新用户,你只需做到以下几点: -

new User object1 { Name = "Fred", UserRole = UserRole.Client}; 

dbContext.Save(object1); 

EF会知道的employeeTypeId另存为3在数据库中。

的优点变得更好,因为现在你可以说: -

if(User.UserRole == UserRole.Adminstartor) 
{ 
    //Do Stuff 
} 
+0

[图片](https://www.dropbox.com/s/dh1m2o2apv2wamj/edmxpic.jpg) 这里是我的情况。 其实这是我第一次使用edmx做某事,因为我通常使用类来使用实体框架。我不明白转换employeetypeId的概念,如果它是在类而不是edmx。你能否引用我的一篇文章来描述你想教我的东西。 :) –

+0

http://msdn.microsoft.com/en-us/data/jj248772.aspx – Derek

+0

感谢您的帮助,但我相信,当你认为“最好的方式来处理这将是将employeetypeId转换为枚举在EF中“,这意味着从代码第一个数据库设计改为EDMX。这将有更好的结果,我必须通过EDMX再次完成我的整个模型结构。所以我不明白你为什么提到我不得不使用EDMX,但你的解决方案进一步完美工作。 :) –