【问题标题】:How to map the relationship between these two entities如何映射这两个实体之间的关系
【发布时间】:2015-02-12 03:22:32
【问题描述】:

我有以下两个实体

     public class Document
     {
            public int Id { get; set; }
            public string Name { get; set; }

            public virtual ICollection<UploadedFile> UploadedFiles{ get; set; }
   }

    public class UploadedFile
    {
        public int Id { get; set; }
        public string FileName{get;set;}
        public string EntityName {get;set;}
        public string EntityId{get;set;}
        public bool IsActive{get;set;}
    }

现在我的要求是我想根据以下条件加载“Document.UploadedFiles”。

UploadedFile.EntityId=Document.Id && UploadedFile.IsActive==true && UploadedFile.EntityName="Document"

如何映射 UploadedFiles 导航属性的关系?

【问题讨论】:

    标签: c# .net entity-framework


    【解决方案1】:

    例如,您可以对匹配条件使用 LINQ 和帮助方法:

    bool IsTargetFile(UploadedFile file, int documentId)
    {
      bool isTargetId = file.EntityId == documentId;
        bool isTargetName = file.EntityName == "Document";
        bool isActive = file.IsActive;
      return isTargetId && isTargetName && isActive;
    }
    void Main()
    {
        var document = new Document { Id = 1, Name = "MyDocument" };
        var targetFile1 = new UploadedFile { EntityId = 1, EntityName = "Document", IsActive = true };
        var nonTargetFile1 = new UploadedFile { EntityId = 2, EntityName = "Document", IsActive = true };
        var nonTargetFile2 = new UploadedFile { EntityId = 1, EntityName = "WrongDocument", IsActive = true };
        var nonTargetFile3 = new UploadedFile { EntityId = 1, EntityName = "Document", IsActive = false };
        document.UploadedFiles = new List<UploadedFile>
        {
          targetFile1, nonTargetFile1, nonTargetFile2, nonTargetFile3
        };
        var targetFiles = document.UploadedFiles.Where(file => IsTargetFile(file, document.Id));
        foreach (var file in targetFiles)
          Console.WriteLine("{0} {1} {2}", file.EntityId, file.EntityName, file.IsActive);
    }
    

    帮助类:

    public class Document
    {
        public int Id { get; set; }
        public string Name { get; set; }    
        public virtual ICollection<UploadedFile> UploadedFiles { get; set; }
    }
    
    public class UploadedFile
    {
        public int Id { get; set; }
        public string FileName { get; set; }
        public string EntityName { get; set; }
        public int EntityId { get; set; }
        public bool IsActive { get; set; }
    }
    

    【讨论】:

    • 这意味着,document.UploadedFiles 拥有所有记录,而不仅仅是那些满足我提到的条件的记录。您的答案是,从 UploadedFile 加载所有记录,然后再次过滤它们。这不是我要找的。​​span>
    【解决方案2】:

    因为没有关系 b/w 表。所以你可以通过以下方法。

    首先,您会找到所有 UploadedFile,其中 .EntityId=Document.Id 如下所示。

    UploadedFile tempRes = db.UploadedFile.where(r=>r.EntityId==Document.Id).select();
    

    然后在 temRes 上选择精确的结果查询。

    UploadedFile Res=tempRes.where(your rest condition).
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-30
      • 1970-01-01
      • 2018-10-21
      • 2012-10-10
      • 1970-01-01
      • 1970-01-01
      • 2012-08-10
      • 1970-01-01
      相关资源
      最近更新 更多