所以我有一个模特:
[Table("Site")]
public class Store : MPropertyAsStringSettable {
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
public string Name { get; set; }
public int CompanyID { get; set; }
public bool IsActive { get; set; }
public string Address { get; set; }
public string City { get; set; }
[Display(Name = "Province")]
public int ProvinceID { get; set; }
public string Postal { get; set; }
public string Phone { get; set; }
public int StoreNumber { get; set; }
public bool visible { get; set; }
public DateTime lastShift { get; set; }
}
字段lastShift来自另一个名为“Shifts”的表,我如何从该表中获取它?
编辑:查找必须是这样的:
select top 1 shiftDate as lastShift from [Shifts] where SiteID = Store.ID
这是我加载数据的方式:
public class MyDbContext: DbContext {
public MyDbContext()
: base("name=DefaultConnection") {
}
public DbSet<UserAccount> UserAccounts { get; set; }
public DbSet<Company> Companies { get; set; }
public DbSet<Store> Stores { get; set; }
public DbSet<ProvinceModel> Provinces { get; set; }
}
这就是我使用它的方式:
MyDbContext database = new MyDbContext();
var myStores = from database.Stores select ID;
答案 0 :(得分:1)
根据您上次编辑编辑,情况并非如此
它需要是一个&#34;导航属性&#34;这意味着您需要在站点和发货之间建立明确的(Foreing Key)关系
然后你会有类似的东西
Store.Shift.LastShift
击> <击> 撞击>
但是如果它是一对多的关系(并且LastShift字段不是Shift表的一部分)那么
您需要手动执行此操作,并使用视图模型或自定义属性,它不会直接映射到表格并在代码中的某处进行分配
如果你正在使用存储库,那么你需要在那里添加一个方法来获得最后一次移位
然后(或者如果你直接使用ORM)你使用@Cristi发布的代码,只记得添加排序
public ActionResult MyAction(){
var store = db.Stores.Where(x => x.ID == objId).Select(x => new StoreModel(){
Name = x.Name,
ID = x.ID,
lastShift = db.Shifts.FirstOrDefault(y => y.SiteID == x.ID).OrderByDescending(shift => shift.Date);
}).FirstOrDefault();
return View(store);
}
答案 1 :(得分:1)
以下是我解决问题的方法。
TL,DR:我在我的控制器中共享了我的dbcontext,所以我可以在我的模型中访问它!
我使用以下代码手动加载我的商店模型中的lastShiftTime:
public class Store : MPropertyAsStringSettable {
.......
public DateTime lastShiftTime {
get{
MyDbContext curContext = MyWebProject.Controllers.MyBaseController.database;
if (curContext != null) {
return (from shift in curContext.Shifts where shift.SiteID == ID select shift.ShiftDate).First();
} else {
return new DateTime(0);
}
}
}
}
这是我为此创建的Shift模型,非常标准:
[Table("Shifts")]
public class Shift : MPropertyAsStringSettable {
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
public int SiteID { get; set; }
public string ShiftID_In_POS { get; set; }
public DateTime ShiftDate { get; set; }
}
以下是我在控制器中共享上下文的方式:
public class MyBaseController : Controller {
.........
private static MyDbContext _database;
public static MyDbContext database {
get {
if (_database == null) {
_database = new MyDbContext();
}
return _database;
}
}
}