public void OnTypeCreation(MetadataContainer metadataContainer) { metadataContainer.Entity <Foo>().Projection(x => x.Id2).IsKey(); metadataContainer.Add(new FooMetadata()); metadataContainer.Entity <Bar>().Projection(x => x.FooSet).Association().WithName("MyAssociation"). WithThisKey(x => x.Id2, x => x.Id).WithOtherKey(x => x.Id2, x => x.Id); }
/// <summary> /// A linkTable entity contains many properties that can be annotated as KeyAttribute. In this method we mark all of them to be excluded (using the ExceludeAttribute), except for /// those of them that are actually allocated as key properties. This way, the generated entity at the client will only have properties that really are KeyAttributes. /// </summary> /// <param name="metaData"> </param> private void MarkLinkTableKeysAsDataMembers(MetadataClass <TLinkTable> metaData) { var linkTableMetaData = _metaDataContainer.Entity <TLinkTable>(); var typeDescr = _metaDataContainer.GetTypeDescriptor(typeof(TLinkTable)); foreach (var propDescr in typeDescr.GetProperties().OfType <PropertyDescriptor>()) { var memberMetadata = metaData.GetMemberMetadata(propDescr.Name); if (memberMetadata == null || (memberMetadata.OfType <KeyAttribute>().Any() == false && memberMetadata.OfType <AssociationAttribute>().Any() == false)) { linkTableMetaData.AddMetadata(propDescr.Name, new ExcludeAttribute()); } } }
public M2M4RiaExpression(MetadataContainer metaDataContainer, string m2m1, string m2mView1, string m2mView2, string m2m2) { _metaDataContainer = metaDataContainer; var linkTableMetaData = metaDataContainer.Entity <TLinkTable>(); var object1MetaData = metaDataContainer.Entity <TObject1>(); var object2MetaData = metaDataContainer.Entity <TObject2>(); object1MetaData.AddMetadata(m2mView1, new IncludeAttribute()); object2MetaData.AddMetadata(m2mView2, new IncludeAttribute()); var object1Keys = GetKeys <TObject1>(metaDataContainer); var object2Keys = GetKeys <TObject2>(metaDataContainer); SetupLinkTableAssociations(x => x.Object1, m2mView1, object1Keys.ToList()); SetupLinkTableAssociations(x => x.Object2, m2mView2, object2Keys.ToList()); MarkLinkTableKeysAsDataMembers(linkTableMetaData); object1MetaData.AddMetadata( m2mView1, new LinkTableViewAttribute { LinkTableType = typeof(TLinkTable), M2MPropertyName = m2m1, ElementType = typeof(TObject2), OtherEndAssociationName = typeof(TObject1).Name + "_" + m2mView1 }); object2MetaData.AddMetadata( m2mView2, new LinkTableViewAttribute { LinkTableType = typeof(TLinkTable), M2MPropertyName = m2m2, ElementType = typeof(TObject1), OtherEndAssociationName = typeof(TObject2).Name + "_" + m2mView2 }); }
public void OnTypeCreation(MetadataContainer metadataContainer) { metadataContainer.Entity <Dog>().Projection(x => x.Trainers).M2M( x => x.DogTrainers, x => x.DogTrainers, x => x.Dogs); }
public void OnTypeCreation(MetadataContainer metadataContainer) { metadataContainer.Entity<Dog>().Projection(x => x.Trainers).M2M( x => x.DogTrainers, x => x.DogTrainers, x => x.Dogs); }