Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架虚拟导航属性_C#_Entity Framework_Database Design_Ef Code First - Fatal编程技术网

C# 实体框架虚拟导航属性

C# 实体框架虚拟导航属性,c#,entity-framework,database-design,ef-code-first,C#,Entity Framework,Database Design,Ef Code First,我使用EF6开发web应用程序 假设我有以下型号: public interface IBaseEntityObject { public int Id {get; set;} } public abstract class BaseEntityObject : IBaseEntityObject { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int Id {get;

我使用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);
    }
}
公共接口IBaseEntityObject
{
公共int Id{get;set;}
}
公共抽象类BaseEntityObject:IBaseEntityObject
{
[关键]
[数据库生成(DatabaseGeneratedOption.Identity)]
公共int Id{get;set;}
}
公用类文件夹:BaseEntityObject
{   
公共字符串名称{get;set;}
公共列表字母{get;set;}
}
公共抽象类字母:BaseEntityObject
{   
公共字符串标题{get;set;}
公共字符串内容{get;set;}
公用虚拟文件夹{get;set;}
public int FolderId{get;set;}
公共日期时间创建日期{get;set;}
}
公共类支出者:信
{
//..支出者财产
}
公共类收件人:信函
{
//..接收器属性
}
公共类MyDbContext:DbContext
{
公共数据库集文件夹{get;set;}
公共DbSet字母{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
基于模型创建(modelBuilder);
//文件夹信件
modelBuilder.Entity()
.HasRequired(t=>t.Folder)
.有许多(f=>f字母)
.HasForeignKey(t=>t.FolderId)
.WillCascadeOnDelete(真);
}
}
如果我从信件模型中删除虚拟文件夹导航属性,是否有任何损失?我不希望我的客户在要求写信时收到一个文件夹,这似乎是错误的

我只是想知道,如果删除此属性,我是否会失去一些EF性能

谢谢

我不想让我的客户在要求一个文件夹时收到一个文件夹 信似乎错了

您不应将域对象返回给客户端,而应将数据传输对象返回给客户端:

当您使用远程接口(如远程Facade)时 (388),每次打电话都很贵。因此,您需要减少 电话的数量,这意味着您需要转接更多电话 每次通话都要记录数据。一种方法是使用大量参数。 然而,这通常很难编程——事实上,它通常是 像Java这样只返回一个字符的语言是不可能的 价值观

解决方案是创建一个可以保存所有数据的数据传输对象 呼叫的数据。它需要可序列化才能跨越 连接。通常在服务器端使用汇编程序来 在DTO和任何域对象之间传输数据


据我所知,这意味着创建另一个对象来保存我想发送给客户的数据——这意味着我将为客户创建另一个LetterForClient,它只保存例如Title和FolderId?不管怎样,是否有充分的理由保留虚拟文件夹导航属性?如果未使用virtual,EF将无法在调用此属性时在LazyLoading中填充此属性。如果我设置EnableLazyLoading=false?删除此属性会改变任何事情?@S.Peter保留或不保留整个属性取决于您,谁知道呢,但无论如何,您不应该将域对象返回给您的客户端,这只是一条规则,以避免您当前遇到的情况