public IDynamicFilter GetDynamicFilter(string dynamicFilterViewName, DynamicPropertyMetadata dynamicPropertyMetadata, RouteValueDictionaryWrapper routeValueDictionaryWrapper) { var dynamicFilter = CreateDynamicFilter(dynamicFilterViewName, dynamicPropertyMetadata, routeValueDictionaryWrapper); CallViewModelCreated(dynamicFilter, dynamicPropertyMetadata); return(dynamicFilter); }
public DynamicPropertyIndexViewModel BuildDynamicPropertyIndexViewModel(DynamicPropertyMetadata dynamicPropertyMetadata) { var dynamicPropertyIndexViewModel = new DynamicPropertyIndexViewModel(dynamicPropertyMetadata); if (dynamicPropertyMetadata.DataType() == DataType.Password) { return(null); } dynamicPropertyIndexViewModel.AllowSort = dynamicPropertyMetadata.AllowSort(); if (dynamicPropertyMetadata is DynamicForiegnKeyPropertyMetadata) { dynamicPropertyIndexViewModel.ViewModelPropertyName = "Item." + dynamicPropertyMetadata.PropertyName(); //ToDo: This logic could probably be pushed back to a lower level if (dynamicPropertyMetadata.DisplayName() == dynamicPropertyMetadata.PropertyName()) { dynamicPropertyIndexViewModel.DisplayName = ((DynamicForiegnKeyPropertyMetadata)dynamicPropertyMetadata).ComplexEntityPropertyMetadata.PropertyName(); } dynamicPropertyIndexViewModel.SortExpression = ((DynamicForiegnKeyPropertyMetadata)dynamicPropertyMetadata).ComplexEntityPropertyMetadata.PropertyName() + "." + ((DynamicForiegnKeyPropertyMetadata)dynamicPropertyMetadata).ComplexDynamicEntityMetadata.DefaultProperty().PropertyName(); dynamicPropertyIndexViewModel.PartialViewName = "_DynamicDisplayHyperlink"; } else if (dynamicPropertyMetadata.IsSimple()) { dynamicPropertyIndexViewModel.ViewModelPropertyName = "Item." + dynamicPropertyMetadata.PropertyName(); dynamicPropertyIndexViewModel.PartialViewName = "_DynamicDisplay"; } else if (dynamicPropertyMetadata.IsDynamicCollection()) { dynamicPropertyIndexViewModel.ViewModelPropertyName = "Item." + dynamicPropertyMetadata.PropertyName(); dynamicPropertyIndexViewModel.PartialViewName = "_DynamicDisplayHyperlink"; } return(dynamicPropertyIndexViewModel); }
public override void ViewModelCreated(DynamicPropertyMetadata dynamicPropertyMetadata, IDictionary <string, object> controlParameters) { base.ViewModelCreated(dynamicPropertyMetadata, controlParameters); var dynamicForiegnKeyPropertyMetadata = (DynamicForiegnKeyPropertyMetadata)dynamicPropertyMetadata; string selectedValue = ""; if (RouteValueDictionaryWrapper.ContainsKey(dynamicPropertyMetadata.PropertyName)) { selectedValue = RouteValueDictionaryWrapper.GetValue(dynamicPropertyMetadata.PropertyName).ToString(); } if (LabelText == PropertyName) { LabelText = dynamicForiegnKeyPropertyMetadata.ComplexEntityPropertyMetadata.PropertyName; } Type = dynamicForiegnKeyPropertyMetadata.ComplexDynamicEntityMetadata.EntityType; DataTextField = dynamicForiegnKeyPropertyMetadata.ComplexDynamicEntityMetadata.DefaultProperty.PropertyName; DataValueField = dynamicForiegnKeyPropertyMetadata.ComplexDynamicEntityMetadata.KeyProperty.PropertyName; if (controlParameters.ContainsKey("NullText")) { NullText = controlParameters["NullText"].ToString(); } else { NullText = "Select Item"; } SelectedValue = selectedValue; SelectList = _selectListItemManager.GetSelectListItems(Type, DataValueField, DataTextField, SelectedValue, NullText); }
public override void ViewModelCreated(DynamicPropertyMetadata dynamicPropertyMetadata, IDictionary <string, object> controlParameters) { base.ViewModelCreated(dynamicPropertyMetadata, controlParameters); if (RouteValueDictionaryWrapper.ContainsKey(QueryStringName)) { FilterValue = RouteValueDictionaryWrapper.GetValue(QueryStringName).ToString(); } }
private void CallViewModelCreated(IDynamicFilter dynamicFilter, DynamicPropertyMetadata dynamicPropertyMetadata) { var controlParameters = (IDictionary <string, object>) new Dictionary <string, object>(); if (dynamicPropertyMetadata.HasDynamicFilterUIAttribute()) { controlParameters = dynamicPropertyMetadata.GetDynamicFilterUIHintAttribute().ControlParameters; } dynamicFilter.ViewModelCreated(dynamicPropertyMetadata, controlParameters); }
public virtual void ViewModelCreated(DynamicPropertyMetadata dynamicPropertyMetadata, IDictionary <string, object> controlParameters) { LabelText = dynamicPropertyMetadata.DisplayName(); QueryStringName = PropertyName; if (controlParameters.ContainsKey("QueryStringName")) { QueryStringName = controlParameters["QueryStringName"].ToString(); } if (controlParameters.ContainsKey("LabelText")) { LabelText = controlParameters["LabelText"].ToString(); } }
public void Build(DynamicPropertyMetadata dynamicPropertyMetadata, DynamicPropertyEditorViewModel dynamicPropertyViewModel, dynamic item) { var dynamicForiegnKeyPropertyMetadata = ((DynamicForiegnKeyPropertyMetadata)dynamicPropertyMetadata); var type = dynamicForiegnKeyPropertyMetadata.ComplexDynamicEntityMetadata.EntityTypeFunction()(); var dataTextField = dynamicForiegnKeyPropertyMetadata.ComplexDynamicEntityMetadata.DefaultProperty().PropertyName(); var dataValueField = dynamicForiegnKeyPropertyMetadata.ComplexDynamicEntityMetadata.KeyProperty().PropertyName(); var dynamicEditorDropDownViewModel = new DynamicEditorDropDownViewModel(dynamicForiegnKeyPropertyMetadata.ComplexDynamicEntityMetadata.EntityTypeFunction()(), dynamicForiegnKeyPropertyMetadata.ComplexDynamicEntityMetadata.DefaultProperty().PropertyName(), dynamicForiegnKeyPropertyMetadata.ComplexDynamicEntityMetadata.KeyProperty().PropertyName()); var value = dynamicPropertyMetadata.GetValueFunction()(item); dynamicEditorDropDownViewModel.SelectListItems = _selectListItemManager.GetSelectListItems(type, dataValueField, dataTextField, value); dynamicPropertyViewModel.DynamicEditorDropDownViewModel = dynamicEditorDropDownViewModel; dynamicPropertyViewModel.DisplayName = dynamicForiegnKeyPropertyMetadata.ComplexEntityPropertyMetadata.PropertyName(); }
public void Build(DynamicPropertyMetadata dynamicPropertyMetadata, DynamicPropertyEditorViewModel dynamicPropertyViewModel, dynamic item) { var dynamicForiegnKeyPropertyMetadata = ((DynamicForiegnKeyPropertyMetadata)dynamicPropertyMetadata); var dynamicEditorAutoCompleteViewModel = new DynamicEditorAutoCompleteViewModel(); var type = dynamicForiegnKeyPropertyMetadata.ComplexDynamicEntityMetadata.EntityType; var dataTextField = dynamicForiegnKeyPropertyMetadata.ComplexDynamicEntityMetadata.DefaultProperty.PropertyName; dynamicEditorAutoCompleteViewModel.TypeName = type.Name; var value = dynamicPropertyMetadata.ReflectedProperty.ReflectedPropertyOperations.GetValueFunction(item); dynamicEditorAutoCompleteViewModel.SelectedText = GetSelectItemText(type, value, dataTextField); dynamicPropertyViewModel.DynamicEditorAutoCompleteViewModel = dynamicEditorAutoCompleteViewModel; dynamicPropertyViewModel.DisplayName = dynamicForiegnKeyPropertyMetadata.ComplexEntityPropertyMetadata.PropertyName; }
private IDynamicFilter CreateDynamicFilter(string dynamicFilterViewName, DynamicPropertyMetadata dynamicPropertyMetadata, RouteValueDictionaryWrapper routeValueDictionaryWrapper) { var dynamicFilter = _dynamicFilters.SingleOrDefault(x => x.DynamicFilterViewName() == dynamicFilterViewName); if (dynamicFilter == null) { throw new Exception("Could not find Dynamic Filter for " + dynamicFilterViewName); } //ToDo: this line was added due to unexpected data showing up in routevaluedictionary. //prevoius version used activator here. look into removing this line dynamicFilter = _serviceProvider.Resolve <IDynamicFilter>(dynamicFilter.GetType()); dynamicFilter.PropertyName = dynamicPropertyMetadata.PropertyName(); dynamicFilter.RouteValueDictionaryWrapper = routeValueDictionaryWrapper; return(dynamicFilter); }
public void Build(DynamicPropertyMetadata dynamicPropertyMetadata, DynamicPropertyIndexViewModel dynamicPropertyIndexViewModel, dynamic item) { if (dynamicPropertyMetadata.IsDynamicCollection) { //view model instructions for collection with dynamicdisplayhyperlink var dynamicHyperlinkViewModel = new DynamicEditorHyperlinkViewModel("View " + dynamicPropertyMetadata.DisplayName, dynamicPropertyMetadata.TypeName, "Index"); ////ToDo: Need to review this. It assumes FK follows a certain naming convention. FK must have name of related type var fkPropertyName = ((DynamicCollectionEntityPropertyMetadata)dynamicPropertyMetadata).ForiegnKeyPropertyName; dynamicHyperlinkViewModel.RouteValueDictionaryWrapper.SetValue(fkPropertyName, dynamicPropertyMetadata.DynamicEntityMetadata.KeyProperty.GetValueFunction(item)); dynamicPropertyIndexViewModel.DynamicEditorHyperlinkViewModel = dynamicHyperlinkViewModel; } else if (dynamicPropertyMetadata is DynamicForiegnKeyPropertyMetadata) { var dataIsNull = false; var dynamicForiegnKeyPropertyMetadata = ((DynamicForiegnKeyPropertyMetadata)dynamicPropertyMetadata); var dynamicEntity = dynamicForiegnKeyPropertyMetadata.ComplexEntityPropertyMetadata.GetValueFunction(item); if (dynamicEntity == null) { if (dynamicForiegnKeyPropertyMetadata.IsNullableType) { dataIsNull = true; } else { throw new Exception("DynamicMVC cannot display the default value for " + dynamicPropertyMetadata.PropertyName + " because the DynamicEntity is not loaded. Please make sure you are loading the " + dynamicPropertyMetadata.PropertyName + " in your query."); } } if (dataIsNull) { dynamicPropertyIndexViewModel.DynamicEditorHyperlinkViewModel = null; } else { var displayValue = ((DynamicForiegnKeyPropertyMetadata)dynamicPropertyMetadata).ComplexDynamicEntityMetadata.DefaultProperty.GetValueFunction(dynamicEntity); var dynamicHyperlinkViewModel = new DynamicEditorHyperlinkViewModel(displayValue.ToString(), ((DynamicForiegnKeyPropertyMetadata)dynamicPropertyMetadata).ComplexDynamicEntityMetadata.TypeName, "Details"); dynamicHyperlinkViewModel.RouteValueDictionaryWrapper.SetValue("Id", ((DynamicForiegnKeyPropertyMetadata)dynamicPropertyMetadata).ComplexDynamicEntityMetadata.KeyProperty.GetValueFunction(dynamicEntity)); dynamicPropertyIndexViewModel.DynamicEditorHyperlinkViewModel = dynamicHyperlinkViewModel; } dynamicPropertyIndexViewModel.DisplayName = ((DynamicForiegnKeyPropertyMetadata)dynamicPropertyMetadata).ComplexEntityPropertyMetadata.PropertyName; } }
public void Build(DynamicPropertyMetadata dynamicPropertyMetadata, DynamicPropertyEditorViewModel dynamicPropertyViewModel, dynamic item) { if (dynamicPropertyMetadata is DynamicForiegnKeyPropertyMetadata) { var dynamicEntity = ((DynamicForiegnKeyPropertyMetadata)dynamicPropertyMetadata).ComplexEntityPropertyMetadata.GetValueFunction()(item); var showHyperlink = true; if (dynamicEntity == null) { if (dynamicPropertyMetadata.IsNullableType()) { showHyperlink = false; } else { throw new Exception("DynamicMVC cannot display the default value for " + dynamicPropertyMetadata.PropertyName() + " because the DynamicEntity is not loaded. Please make sure you are loading the " + dynamicPropertyMetadata.PropertyName() + " in your query."); } } if (showHyperlink) { var displayValue = ((DynamicForiegnKeyPropertyMetadata)dynamicPropertyMetadata).ComplexDynamicEntityMetadata.DefaultProperty().GetValueFunction()(dynamicEntity); var dynamicHyperlinkViewModel = new DynamicEditorHyperlinkViewModel(displayValue.ToString(), ((DynamicForiegnKeyPropertyMetadata)dynamicPropertyMetadata).ComplexEntityPropertyMetadata.TypeName(), "Details"); dynamicPropertyViewModel.DynamicEditorHyperlinkViewModel = dynamicHyperlinkViewModel; //ToDo: Need to review this. It assumes FK follows a certain naming convention. FK must have name of related type dynamicHyperlinkViewModel.RouteValueDictionaryWrapper.SetValue("Id", ((DynamicForiegnKeyPropertyMetadata)dynamicPropertyMetadata).ComplexDynamicEntityMetadata.KeyProperty().GetValueFunction()(dynamicEntity)); } dynamicPropertyViewModel.DisplayName = ((DynamicForiegnKeyPropertyMetadata)dynamicPropertyMetadata).ComplexEntityPropertyMetadata.PropertyName(); } else if (dynamicPropertyMetadata.IsDynamicCollection()) { var dynamicHyperlinkViewModel = new DynamicEditorHyperlinkViewModel("View " + dynamicPropertyViewModel.PropertyName, dynamicPropertyMetadata.CollectionItemTypeName(), "Index"); var fkPropertyName = ((DynamicCollectionEntityPropertyMetadata)dynamicPropertyMetadata).ForiegnKeyPropertyName; dynamicHyperlinkViewModel.RouteValueDictionaryWrapper.SetValue(fkPropertyName, dynamicPropertyMetadata.DynamicEntityMetadata.KeyProperty().GetValueFunction()(item)); dynamicPropertyViewModel.DynamicEditorHyperlinkViewModel = dynamicHyperlinkViewModel; } else { throw new Exception("DynamicEditorHyperlinkMaterializer was called on a non DynamicForiegnKeyPropertyMetadata"); } }
public override void ViewModelCreated(DynamicPropertyMetadata dynamicPropertyMetadata, IDictionary <string, object> controlParameters) { base.ViewModelCreated(dynamicPropertyMetadata, controlParameters); //set filtervalue if it exists in the route if (RouteValueDictionaryWrapper.ContainsKey(QueryStringName)) { DateTime result; if (DateTime.TryParse(RouteValueDictionaryWrapper.GetValue(QueryStringName).ToString(), out result)) { FilterValue = result; } } //set filtervalue to default value if it does not exist in the route if (!FilterValue.HasValue && controlParameters.ContainsKey("AddDays") && controlParameters["AddDays"] is int) { var addDays = (int)controlParameters["AddDays"]; FilterValue = DateTime.Now.AddDays(addDays); } }
public override void ViewModelCreated(DynamicPropertyMetadata dynamicPropertyMetadata, IDictionary <string, object> controlParameters) { base.ViewModelCreated(dynamicPropertyMetadata, controlParameters); var nullText = "Select..."; if (controlParameters.ContainsKey("NullText")) { nullText = controlParameters["NullText"].ToString(); } if (RouteValueDictionaryWrapper.ContainsKey(QueryStringName)) { var origonalValue = RouteValueDictionaryWrapper.GetValue(QueryStringName).ToString(); //There is an issue with html.checkbox. It sends down true,false when checked. if (origonalValue == "true,false") { origonalValue = "true"; } FilterValue = bool.Parse(origonalValue); } SelectList = _selectListItemManager.GetSelectListItemForBooleanDropDown(FilterValue, nullText); }
public IEnumerable <DynamicPropertyMetadata> Build(IReflectedClass reflectedClass, IEnumerable <IReflectedClass> reflectedClasses) { var dynamicPropertyMetadatas = new List <DynamicPropertyMetadata>(); foreach (var reflectedProperty in reflectedClass.ReflectedProperties.ToList()) { var dynamicPropertyMetadata = new DynamicPropertyMetadata(reflectedProperty, reflectedClasses); if (_navigationPropertyManager.IsForeignKey(reflectedProperty, reflectedClass)) { dynamicPropertyMetadata = new DynamicForiegnKeyPropertyMetadata(reflectedProperty, reflectedClasses); } if (dynamicPropertyMetadata.IsDynamicEntity()) { dynamicPropertyMetadata = new DynamicComplexPropertyMetadata(reflectedProperty, reflectedClasses); } if (dynamicPropertyMetadata.IsDynamicCollection()) { dynamicPropertyMetadata = new DynamicCollectionEntityPropertyMetadata(reflectedProperty, reflectedClasses); } dynamicPropertyMetadatas.Add(dynamicPropertyMetadata); } return(dynamicPropertyMetadatas); }
public override void ViewModelCreated(DynamicPropertyMetadata dynamicPropertyMetadata, IDictionary <string, object> controlParameters) { base.ViewModelCreated(dynamicPropertyMetadata, controlParameters); if (RouteValueDictionaryWrapper.ContainsKey(QueryStringName)) { FilterValue = RouteValueDictionaryWrapper.GetValue(QueryStringName).ToString(); } if (!controlParameters.ContainsKey("Type") && !controlParameters.ContainsKey("DisplayMember") && !controlParameters.ContainsKey("ValueMember")) { //this view model was created from a dynamicforiegnKeyPropertyMetadata var dynamicForiegnKeyPropertyMetadata = (DynamicForiegnKeyPropertyMetadata)dynamicPropertyMetadata; Type = dynamicForiegnKeyPropertyMetadata.ComplexDynamicEntityMetadata.EntityType; DisplayMember = dynamicForiegnKeyPropertyMetadata.ComplexDynamicEntityMetadata.DefaultProperty.PropertyName; ValueMember = dynamicForiegnKeyPropertyMetadata.ComplexDynamicEntityMetadata.KeyProperty.PropertyName; if (LabelText == PropertyName) { LabelText = dynamicForiegnKeyPropertyMetadata.ComplexEntityPropertyMetadata.PropertyName; } } else { Type = (Type)controlParameters["Type"]; DisplayMember = controlParameters["DisplayMember"].ToString(); ValueMember = controlParameters["ValueMember"].ToString(); } if (!string.IsNullOrEmpty(FilterValue)) { FilterText = _dynamicMvcManager.GetSelectItemText(Type, FilterValue, DisplayMember); } else { FilterText = ""; } }
public DynamicPropertyEditorViewModel(DynamicPropertyMetadata dynamicPropertyMetadata) : base(dynamicPropertyMetadata) { }
public DynamicPropertyIndexViewModel(DynamicPropertyMetadata dynamicPropertyMetadata) : base(dynamicPropertyMetadata) { }
public DynamicPropertyViewModel(DynamicPropertyMetadata dynamicPropertyMetadata) { ViewModelPropertyName = dynamicPropertyMetadata.PropertyName; PropertyName = dynamicPropertyMetadata.PropertyName; DisplayName = dynamicPropertyMetadata.DisplayName; }
public DynamicFilterViewModel(DynamicPropertyMetadata dynamicPropertyMetadata) : base(dynamicPropertyMetadata) { }
public DynamicPropertyEditorViewModel BuildDynamicPropertyEditorViewModelForEdit(DynamicPropertyMetadata dynamicPropertyMetadata) { var dynamicPropertyViewModel = new DynamicPropertyEditorViewModel(dynamicPropertyMetadata); dynamicPropertyViewModel.ViewModelPropertyName = "Item." + dynamicPropertyMetadata.PropertyName(); //assign editor if (!string.IsNullOrWhiteSpace(dynamicPropertyMetadata.UIHint())) { dynamicPropertyViewModel.DynamicEditorName = dynamicPropertyMetadata.UIHint(); } else if (dynamicPropertyMetadata.DataType() == DataType.MultilineText) { dynamicPropertyViewModel.DynamicEditorName = "DynamicEditorMultiLine"; } else if (dynamicPropertyMetadata.DataType() == DataType.Password) { dynamicPropertyViewModel.DynamicEditorName = "DynamicEditorPassword"; } else if (dynamicPropertyMetadata is DynamicForiegnKeyPropertyMetadata) { var dynamicForiegnKeyPropertyMetadata = ((DynamicForiegnKeyPropertyMetadata)dynamicPropertyMetadata); var dropdownType = dynamicForiegnKeyPropertyMetadata.ComplexDynamicEntityMetadata.EntityTypeFunction()(); if (_dynamicRepository.GetItemsCount(dropdownType) > _dynamicMvcManager.Options.DynamicDropDownRecordLimit) { dynamicPropertyViewModel.DynamicEditorName = "DynamicEditorAutoComplete"; } else { dynamicPropertyViewModel.DynamicEditorName = "DynamicEditorDropDown"; } } else if (dynamicPropertyMetadata.SimpleTypeEnum() == SimpleTypeEnum.DateTime) { dynamicPropertyViewModel.DynamicEditorName = "DynamicEditorDateTime"; } else if (dynamicPropertyMetadata.SimpleTypeEnum() == SimpleTypeEnum.DateTimeNullable) { dynamicPropertyViewModel.DynamicEditorName = "DynamicEditorDateTime"; } else if (dynamicPropertyMetadata.SimpleTypeEnum() == SimpleTypeEnum.Bool) { dynamicPropertyViewModel.DynamicEditorName = "DynamicEditorBool"; } else if (dynamicPropertyMetadata.SimpleTypeEnum() == SimpleTypeEnum.BoolNullable) { dynamicPropertyViewModel.DynamicEditorName = "DynamicEditorBoolNullable"; } else { dynamicPropertyViewModel.DynamicEditorName = "DynamicEditor"; } return(dynamicPropertyViewModel); }
public DynamicPropertyEditorViewModel BuildDynamicPropertyEditorViewModelForDetails(DynamicPropertyMetadata dynamicPropertyMetadata) { var dynamicPropertyEditorViewModel = new DynamicPropertyEditorViewModel(dynamicPropertyMetadata); dynamicPropertyEditorViewModel.ViewModelPropertyName = "Item." + dynamicPropertyMetadata.PropertyName(); //assign editor if (!string.IsNullOrWhiteSpace(dynamicPropertyMetadata.UIHint())) { dynamicPropertyEditorViewModel.DynamicEditorName = dynamicPropertyMetadata.UIHint(); } else if (dynamicPropertyMetadata.DataType() == DataType.MultilineText) { dynamicPropertyEditorViewModel.DynamicEditorName = "DynamicEditorMultiLineReadonly"; } else if (dynamicPropertyMetadata.DataType() == DataType.Password) { return(null); } else if (dynamicPropertyMetadata is DynamicForiegnKeyPropertyMetadata) { dynamicPropertyEditorViewModel.DynamicEditorName = "DynamicEditorHyperlink"; } else if (dynamicPropertyMetadata.IsSimple()) { dynamicPropertyEditorViewModel.DynamicEditorName = "DynamicEditorReadOnly"; } else if (dynamicPropertyMetadata.IsDynamicCollection()) { dynamicPropertyEditorViewModel.DynamicEditorName = "DynamicEditorHyperlink"; } else { dynamicPropertyEditorViewModel.DynamicEditorName = "DynamicEditor"; } return(dynamicPropertyEditorViewModel); }
public IDynamicFilter GetDynamicFilter(DynamicFilterUIHintAttribute dynamicFilterUIHintAttribute, DynamicPropertyMetadata dynamicPropertyMetadata, RouteValueDictionaryWrapper routeValueDictionaryWrapper) { var dynamicFilter = CreateDynamicFilter(dynamicFilterUIHintAttribute.DynamicFilterViewName, dynamicPropertyMetadata, routeValueDictionaryWrapper); dynamicFilter.Order = dynamicPropertyMetadata.GetDynamicFilterUIHintAttribute().Order; CallViewModelCreated(dynamicFilter, dynamicPropertyMetadata); return(dynamicFilter); }
public DynamicPropertyMetadata GetCollectionProperty(DynamicEntityMetadata dynamicEntityMetadata, DynamicPropertyMetadata dynamicPropertyMetadata) { var collectionProperties = dynamicEntityMetadata.DynamicPropertyMetadatas.Where(x => x.IsDynamicCollection() && x.TypeName() == dynamicEntityMetadata.TypeName()).Select(x => (DynamicCollectionEntityPropertyMetadata)x).ToList(); if (collectionProperties.Count == 0) { return(null); } if (collectionProperties.Count == 1) { return(collectionProperties.First()); } collectionProperties = collectionProperties.Where(x => x.InverseProperty != null && x.InverseProperty == dynamicPropertyMetadata.PropertyName()).ToList(); if (collectionProperties.Count == 1) { return(collectionProperties.First()); } if (collectionProperties.Count == 0) { return(null); } throw new Exception("Collection cannot be found in entity " + dynamicEntityMetadata.TypeName() + " for property " + dynamicPropertyMetadata.TypeName()); }