EF6.1代码优先映射或表注释
本文关键字:注释 映射 代码 EF6 | 更新日期: 2023-09-27 18:06:16
我有以下两个模型,我试图设置,但无法弄清楚如何使用数据注释或流畅的API。谁能建议适当的注释或流畅的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; }
}
我遇到的问题是从Vehicle到Job模型的引用,以及从Vehicle到Job的引用。在数据库中,Jobs表保存所有待处理或已完成的作业。可能有也可能没有与之关联的车辆(当作业正在进行或完成时,车辆将与之关联)。对于vehicles表,JobID表示分配给车辆的当前作业(如果它被分配了作业),并且将在一天中不断更改,但应该对Jobs表没有影响。
下面的代码片段概述了您所描述的关系的流畅代码优先示例:
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
}
}
并获取与车辆相关的Jobs:
using (var context = new AppDataContext())
{
var query = context.Vehicles.Where(x => x.Job != null).Select(x => x.Job);
// ...
}
恕我直言,除非严格需要,否则应该将显式外键属性保留在模型之外。这往往使生活更容易,并保持代码干净。
希望这是你正在寻找的…
注:-在"只是张贴链接"的风险-如果你已经有一个数据库(如你的问题所暗示的),它可能值得考虑一个数据库优先的方法:http://msdn.microsoft.com/en-gb/data/jj206878.aspx ..或Code First with a existing database: http://msdn.microsoft.com/en-us/data/jj200620