This is a migrated thread and some comments may be shown as answers.

Property - a list of objects with a composite primary key

0 Answers 62 Views
Development (API, general questions)
This is a migrated thread and some comments may be shown as answers.
This question is locked. New answers and comments are not allowed.
Vitaliy
Top achievements
Rank 1
Vitaliy asked on 17 Mar 2016, 02:15 PM
CREATE TABLE hml.Director (
  Id INT IDENTITY
...
)
 
CREATE TABLE DirectorProperty (
  DirectorID INT NOT NULL
 ,PropertyID INT NOT NULL
 ,DateAdded DATETIME NULL CONSTRAINT DF_DirectorProperty_DateAdded DEFAULT (GETDATE())
 ,MainDirector BIT NOT NULL CONSTRAINT DirectorProperty_MainDirector_DF DEFAULT (0)
 ,CONSTRAINT PK_DirectorProperty PRIMARY KEY CLUSTERED (DirectorID, PropertyID)
 ,CONSTRAINT FK_DirectorProperty_Director FOREIGN KEY (DirectorID) REFERENCES Director (Id) ON DELETE CASCADE
 ,CONSTRAINT FK_DirectorProperty_PROPERTY FOREIGN KEY (PropertyID) REFERENCES PROPERTY (PKEY)
)

 

public class PMSDirectorProperty
   {
       public static MappingConfiguration GetMapping()
       {
           var cfg = new MappingConfiguration<PMSDirectorProperty>();
           PMSMetadataSource.SetDefaultFiledNamingRules(cfg);
           cfg.MapType(m => new
           {
               m.DirectorId,
               m.PropertyId
           }).ToTable("DirectorProperty");
 
           cfg.HasIdentity(c => c.DirectorId);
           cfg.HasIdentity(c => c.PropertyId);
 
           cfg.HasAssociation(c => c.Property).ToColumn("PropertyID");
           cfg.HasAssociation(c => c.Director).ToColumn("DirectorID");
           return cfg;
       }
 
       public int DirectorId { get; private set; }
       public int PropertyId { get; private set; }
 
       public DateTime? DateAdded { get; set; }
       public bool MainDirector { get; set; }
       public PMSDirector Director { get; set; }
       public PMSProperty Property { get; set; }
   }

public class PMSDirector : GUIObject
    {
 
        public static MappingConfiguration GetMapping()
        {
            var cfg = new MappingConfiguration<PMSDirector>();
            PMSMetadataSource.SetDefaultFiledNamingRules(cfg);
            cfg.MapType().UseDefaultMap().ToTable("Director");
            cfg.HasProperty(c => c.Id).IsIdentity(KeyGenerator.Autoinc);
            cfg.HasAssociation(c => c.PreferedContactMethodID).ToColumn("PreferedContactMethodID");
            cfg.HasAssociation(c => c.RMCContact).ToColumn("RMCContactID");
 
            cfg.HasAssociation(c => c.Tenants).MapJoinTable("DirectorTenant", (director, tenant) => new
            {
                TKEY = tenant.Tkey,
                DirectorID = director.Id
            });
 
            cfg.HasAssociation(c => c.DirectorProperties).MapJoinTable("DirectorProperty", (director, property) => new
            {
                PropertyID = property.PropertyId,
                DirectorID = director.Id
            });
 
            cfg.HasProperty(c => c.AddressIsSpecified).AsTransient();
            cfg.HasProperty(c => c.IsTenant).AsTransient();
            cfg.HasProperty(c => c.PCShareDirector).AsTransient();
            return cfg;
        }
...
}

 

Getting a run-time exception on trying to get a PMSDirector from the database:

Telerik.OpenAccess.Exceptions.MetadataException : The field '<value>' of class 'DataDomain.Property.PMSDirector' must use nested db-column extensions in a db-ref extension as the class 'DataDomain.Property.PMSDirectorProperty' has a composite primary key. --> FromMetadataContainer/namespace[DataDomain.Property]/class[PMSDirector]/field[<DirectorProperties>k__BackingField]/collection/db-link-table/db-value/db-column

 

Tags
Development (API, general questions)
Asked by
Vitaliy
Top achievements
Rank 1
Share this question
or