我正在使用代码构建应用程序并生成数据库。
我无法再修改数据库,因此我无法添加/更改列和表。但是域模型(不确定我是否正确使用该术语)需要可以从数据库数据中推断出新属性(属于域的一部分),但不能明确存在。
我的数据库存储房屋的销售信息。所以我有两张桌子,房子和销售。表格由houseID
相关联。现在我希望房子有一个名为LastSaleDate
的属性,但我不能更改底层数据库。
那么,我如何正确构建这个新属性并将其添加到适当的层中?这是我的poco /实体的样子。只是伪编码......
[我正在努力学习我所使用的工具和方法。在我所有的假设中,我可能完全错了,也许我会把它添加到我的pocos中。如果是这种情况,请解释这将如何工作]
[Table("HOUSE_TABLE")]
public class house {
//some properties
public int HouseID {get;set;}
}
[Table("SALE_TABLE")
public class sale {
//some properties
public int HouseID {get;set;
public int SaleID {get;set;}
public datetime SaleDate {get;set;}
public virtual House House {get;set;}
}
我几乎觉得这会创建2级映射。虽然,我不相信我曾经在网上看过的任何代码中看到过这种情况。
poco -> AutoMapper?? -> entities -> Automapper -> viewModels
答案 0 :(得分:1)
这种逻辑很可能属于实体。实体应该同时拥有数据和行为。你似乎在描述的是一些作为财产暴露的行为。因此,您应该将派生值的属性添加到您的实体。默认情况下,如果属性只有getter,则EF不会尝试将值映射到数据库。
例如:
[Table("HOUSE_TABLE")]
public class house
{
//some properties
public int HouseID {get;set;}
public virtual ICollection<Sale> Sales { get; set; }
public DateTime LastSaleDate
{
get
{
return this.Sales.OrderByDescending(s => s.SaleDate).First();
}
}
}