Ye Myint
Ye Myint

Reputation: 11

How to map the relationship between these two entities

I have the following two entities

     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;}
    }

Now my requirement is I want to load "Document.UploadedFiles" based on the following condition.

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

How can I map the relationship for the UploadedFiles navigation property??

Upvotes: 1

Views: 77

Answers (2)

manjunath
manjunath

Reputation: 1

Because there is no Relation b/w tables. So you can go through with following method.

First you find the all UploadedFile where it is .EntityId=Document.Id as below.

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

then select exact result querying on temRes.

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

Upvotes: 0

AndreyAkinshin
AndreyAkinshin

Reputation: 19021

For example, you can use LINQ and a help method for the match condition:

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);
}

Help classes:

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; }
}

Upvotes: 2

Related Questions