派生或推断的属性在哪里属于申请?

时间:2013-06-04 16:13:39

标签: c# entity-framework domain-driven-design automapper methodology

我正在使用代码构建应用程序并生成数据库。

我无法再修改数据库,因此我无法添加/更改列和表。但是域模型(不确定我是否正确使用该术语)需要可以从数据库数据中推断出新属性(属于域的一部分),但不能明确存在。

我的数据库存储房屋的销售信息。所以我有两张桌子,房子和销售。表格由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

1 个答案:

答案 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();
        }
    }
}