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表没有影响。

EF6.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
    }
}

并获取与车辆相关的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