我正在尝试设置以下两个模型,但无法弄清楚如何使用数据注释或流畅的API来实现。任何人都可以建议正确的注释或Fluent API代码吗?
public class Vehicle
{
public int ID { get; set; }
public int JobID { get; set; }
public int StatusID { get; set; }
public string Name { get; set; }
public virtual Job Job { get; set }
public virtual Status Status { get; set; }
}
public class Job
{
public int ID { get; set; }
public int VehicleID { get; set; }
public int StatusID { get; set; }
public string Description { get; set; }
public virtual Vehicle Vehicle{ get; set; }
public virtual Status Status { get; set; }
}
我遇到的问题是从车辆,车辆到工作的工作模型的引用。在数据库中,Jobs表包含所有待处理或已完成的作业。可能有也可能没有与之相关的车辆(当作业正在进行或完成时,车辆将与之相关联)。对于车辆表,JobID表示分配给车辆的当前作业(如果已分配作业)并且将在当天不断变化,但应该对作业表没有影响。
答案 0 :(得分:1)
以下代码段概述了您所描述的关系的流畅代码优先示例:
public class Vehicle
{
public int ID { get; set; }
public string Name { get; set; }
public virtual Job Job { get; set; }
}
public class Job
{
public int ID { get; set; }
public string Description { get; set; }
}
public class AppDataContext : DbContext
{
public DbSet<Vehicle> Vehicles { get; set; }
public DbSet<Job> Jobs { get; set; }
protected override void OnModelCreating(DbModelBuilder mb)
{
mb.Entity<Job>().HasKey(x => x.ID);
mb.Entity<Vehicle>().HasKey(x => x.ID);
mb.Entity<Vehicle>().HasOptional(x => x.Job).WithOptionalDependent();
// ... other config, constraints, etc
}
}
让乔布斯与车辆联系:
using (var context = new AppDataContext())
{
var query = context.Vehicles.Where(x => x.Job != null).Select(x => x.Job);
// ...
}
恕我直言,除非严格要求,否则应将明确的外键属性保留在模型之外。这往往使生活更轻松,并保持代码清洁。
希望这与您正在寻找的内容相符......
P.S。 - 冒着只发布链接的风险&#39; - 如果您已有数据库(如您的问题所暗示的那样),则可能值得考虑数据库优先方法:http://msdn.microsoft.com/en-gb/data/jj206878.aspx ..或Code First与现有数据库:http://msdn.microsoft.com/en-us/data/jj200620