0
之間的關係,我有以下架構:處理一個一對多的業務邏輯和數據訪問層
- 業務邏輯:業務邏輯在這裏發生。這與數據層處理變換對象只(=包含業務相關的數據,沒有任何技術數據對象)
- 數據訪問層:提供連接到數據庫。接受數據變換對象並進入實體對象(含有像技術IDS數據庫相關信息=對象)變換它們。返回數據轉換對象。
- 一些其他層(不重要)
現在我負責的一個一對多的關係(例如:發票可以有多個位置)。
數據變換對象:
public class InvoiceDto
{
public string Number { get; set; }
public DateTime CreationDate { get; set; }
public List<InvoicePositionDto> InvoicePositions { get; set; }
}
public class InvoicePositionDto
{
public string Description { get; set; }
public decimal Costs { get; set; }
}
實體對象:
[Table("Invoices")]
public class InvoiceEntity : BaseEntity
{
[Required]
public string Number { get; set; }
[Required]
public DateTime CreationDate { get; set; }
public virtual ICollection<InvoicePositionEntity> InvoicePositions { get; set; }
}
[Table("InvoicePosition")]
public class InvoicePositionEntity : BaseEntity
{
[Required]
public string Description { get; set; }
[Required]
public decimal Costs { get; set; }
[Required]
public int InvoiceId { get; set; }
public virtual InvoiceEntity Invoice { get; set; }
}
在創建發票,我只是插上數據訪問層所有位置。
當更新的發票,我要考慮關於發票的位置有下列情形:
- 沒有改變
- 一個新的位置加入
- 的職位已被刪除
- 現有的位置被改變
我如何處理這些情況?我想我總是有「比較」的InvoicePositionDtos
與現有數據集的InvoicePositionEntities
。有更容易的方法嗎?
技術細節 - 下面的框架中使用:
- 實體框架
- AutoMapper
EntityFramework可以處理所有這些情況。你基本上是拋所有窗外的分層是失去了實體的頂部信息的DTO(其中,順便說一下,基本上都是DTO的了。)這樣做值得嗎?你在獲得什麼? – jlew
所以你的建議是從實體框架的底部(數據訪問層)發送實體到頂部(視圖)?我在過去的項目中做過這件事,並遇到一些問題,我的觀點直接從實體框架綁定到模型。 – mosquito87
有什麼問題? – jlew