【发布时间】:2017-01-27 05:28:03
【问题描述】:
我有一个我认为是简单的建模问题,但由于某种原因,我无法弄清楚解决它的最佳方法是什么。
我有一个 Person 类(包含有关用户的信息),我有一个 PhoneCarrier 类,其中包含有关 PhoneCarriers 的信息(他们的姓名和用于向个人电话发送电子邮件的电子邮件扩展名)。
这是 Person 类
public class Person
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
[Display(Name = "First Name")]
[Required(ErrorMessage ="{0} is required")]
public string FirstName { get; set; }
[Display(Name = "Last Name")]
[Required(ErrorMessage ="{0} is required")]
public string LastName { get; set; }
[Display(Name = "Dish Order")]
//[Range(1, byte.MaxValue, ErrorMessage = "Value of {0} must be greater than 0")]
public byte DishOrder { get; set; }
[Display(Name = "E-Mail")]
[RegularExpression(".+\\@.+\\..+",
ErrorMessage = "Please enter a valid email address")]
public string Email { get; set; }
[DataType(DataType.Text)]
[RegularExpression(@"(^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$)", ErrorMessage = "{0} must be a numeric value of length 10")]
[Display(Name = "Phone Number")]
//[DisplayFormat(DataFormatString = "{0:###-###-####")]
public string PhoneNumber { get; set; }
[Display(Name = "Phone Carrier")]
public int PhoneCarrier { get; set; }
public virtual ICollection<Fine> Fines { get; set; }
public virtual ICollection<DishDate> DishDates { get; set; }
[NotMapped]
public static IEnumerable<PhoneCarrier> PhoneCarriers { get; set; }
这是 PhoneCarrier 类
public class PhoneCarrier
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
[Required(ErrorMessage ="{0} is required")]
public string Company { get; set; }
[Display(Name = "Email Extension")]
[Required(ErrorMessage ="{0} is required")]
public string EmailExtension { get; set; }
}
我想知道这是否是建模的正确方法,我觉得他们似乎是一个更好的解决方案,因为现在,如果我想获取有关某个人的电话运营商的信息,我必须首先获得该人的phonecarrier id,然后我必须调用 id = phonecarrier id 的 PhoneCarrier。这是一个实际的例子
var phoneCarrierId = person.PhoneCarrier;
return db.PhoneCarriers.Where(x => x.ID == phoneCarrierId).FirstOrDefault().EmailExtension;
有没有一种方法可以将其设置为可以调用 db.Person.PhoneCarrier.EmailExtension 的位置(例如在 PhoneCarrier 类型的 Person 类中创建 int PhoneCarrier 字段)?这似乎是一种更清洁的方法,我想知道这是否可能,或者我这样做的方式是否更正确......
【问题讨论】:
-
为什么你有 IEnumerable
PhoneCarrier in Person。是否存在一对多关系?
标签: c# entity-framework database-design entity-framework-6 c#-5.0