[英]Entity framework virtual navigation property
我使用EF6開發Web應用程序。
說我有以下模型:
public interface IBaseEntityObject
{
public int Id {get; set;}
}
public abstract class BaseEntityObject : IBaseEntityObject
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id {get; set;}
}
public class Folder : BaseEntityObject
{
public string Name {get; set;}
public List<Letter> Letters {get; set;}
}
public abstract class Letter : BaseEntityObject
{
public string Title {get; set;}
public string Content {get; set;}
public virtual Folder Folder {get; set;}
public int FolderId {get; set;}
public DateTime CreationDate {get; set;}
}
public class OutgoingLetter : Letter
{
// .. OutgoingLetter properties
}
public class ReceviedLetter : Letter
{
// .. ReceviedLetter properties
}
public class MyDbContext : DbContext
{
public DbSet<Folder> Folders {get; set;}
public DbSet<Letter> Letters {get; set;}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
// Folder <-> Letters
modelBuilder.Entity<Letter>()
.HasRequired(t => t.Folder)
.WithMany(f => f.Letters)
.HasForeignKey(t => t.FolderId)
.WillCascadeOnDelete(true);
}
}
如果我從Letter模型中刪除虛擬文件夾導航屬性,會不會有任何損失? 我不希望我的客戶在要求一封信時收到一個文件夾。
我只是想知道是否通過刪除此屬性會失去一些EF性能。
謝謝。
我不希望我的客戶在要求一封信時收到一個文件夾。
您不應將域對象返回給客戶端,而應將數據傳輸對象返回給客戶端。 檢查Martin Folwer的定義 :
當您使用遠程接口(例如Remote Facade(388))時,每次調用都非常昂貴。 結果,您需要減少呼叫數量,這意味着您需要在每個呼叫中傳輸更多數據。 一種方法是使用大量參數。 但是,這通常很難進行編程-實際上,對於Java這樣的僅返回單個值的語言,這通常是不可能的。
解決方案是創建一個數據傳輸對象,該對象可以保存呼叫的所有數據。 它需要可序列化才能通過連接。 通常,在服務器端使用匯編程序在DTO和任何域對象之間傳輸數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.