This question is locked. New answers and comments are not allowed.
Hi,
I'm starting to use Fluent Mapping and I have stuck on creating association. I have self referenced class. Fields are: private int _idCategory;
private
int
_idCategory;
public
int
IdCategory
{
get
{
return
_idCategory; }
set
{ _idCategory = value; }
}
private
int
_idCategoryParent;
public
int
IdCategoryParent
{
get
{
return
_idCategoryParent; }
set
{ _idCategoryParent = value; }
}
private
bool
_isLeaf;
public
bool
IsLeaf
{
get
{
return
_isLeaf; }
set
{ _isLeaf = value; }
}
private
string
_categoryName;
public
string
CategoryName
{
get
{
return
_categoryName; }
set
{ _categoryName = value; }
}
private
string
_categoryDescription;
public
string
CategoryDescription
{
get
{
return
_categoryDescription; }
set
{ _categoryDescription = value; }
}
public
cCategory()
{
CategoryName =
"SomeValue"
;
CategoryDescription =
"SomeValue"
;
IsLeaf =
false
;
}
/* ASSOCIATIONS */
private
IList<cCategory> _childCategories =
new
List<cCategory>();
public
virtual
IList<cCategory> ChildCategories
{
get
{
return
this
._childCategories;
}
}
private
cCategory _parentCategory;
public
virtual
cCategory ParentCategory
{
get
{
return
this
._parentCategory;
}
set
{
this
._parentCategory = value;
}
}
I have metadatasource:
protected
override
IList<MappingConfiguration> PrepareMapping()
{
var mappingConfigurations =
new
List<MappingConfiguration>();
MappingConfiguration<cCategory> categoryConfiguration =
this
.Get_Category_Configuration();
mappingConfigurations.Add(categoryConfiguration);
return
mappingConfigurations;
}
protected
override
MetadataContainer CreateModel()
{
Telerik.OpenAccess.Metadata.MetadataContainer model =
base
.CreateModel();
model.DefaultMapping.NullForeignKey =
true
;
return
model;
}
#region Category table
/******************************************************************************** CATEGORY
********************************************************************************/
public
MappingConfiguration<cCategory> Get_Category_Configuration()
{
MappingConfiguration<cCategory> configuration =
this
.Get_Category_ClassConfiguration();
this
.Prepare_Category_PropertyConfigurations(configuration);
this
.Prepare_Category_AssociationConfigurations(configuration);
return
configuration;
}
public
MappingConfiguration<cCategory> Get_Category_ClassConfiguration()
{
var configuration =
new
MappingConfiguration<cCategory>();
var namingRules =
new
Telerik.OpenAccess.Metadata.NamingRules();
namingRules.CaseMode = Telerik.OpenAccess.Metadata.CaseChangeModes.CamelCase;
namingRules.AddPrefix =
"_"
;
configuration.FieldNamingRules = namingRules;
configuration.MapType(x =>
new
{ }).WithDataAccessKind(DataAccessKind.ReadOnly).WithConcurencyControl(OptimisticConcurrencyControlStrategy.Changed).ToTable(tableName:
"Category"
);
return
configuration;
}
public
void
Prepare_Category_PropertyConfigurations(MappingConfiguration<cCategory> configuration)
{
configuration.HasProperty(x => x.IdCategory).IsIdentity(KeyGenerator.Autoinc).WithDataAccessKind(DataAccessKind.ReadWrite).ToColumn(columnName:
"IdCategory"
).IsNullable().HasColumnType(typeName:
"int"
).HasPrecision(precision: 0).HasScale(scale: 0);
configuration.HasProperty(x => x.IdCategoryParent).WithDataAccessKind(DataAccessKind.ReadWrite).ToColumn(columnName:
"IdCategoryParent"
).IsNullable().HasColumnType(typeName:
"int"
).HasPrecision(precision: 0).HasScale(scale: 0);
configuration.HasProperty(x => x.IsLeaf).WithDataAccessKind(DataAccessKind.ReadWrite).ToColumn(columnName:
"IsLeaf"
).IsNotNullable().HasColumnType(typeName:
"bit"
).HasPrecision(precision: 0).HasScale(scale: 0);
configuration.HasProperty(x => x.CategoryName).WithDataAccessKind(DataAccessKind.ReadWrite).ToColumn(columnName:
"CategoryName"
).IsNotNullable().HasColumnType(typeName:
"nvarchar"
).HasLength(length: 50);
configuration.HasProperty(x => x.CategoryDescription).WithDataAccessKind(DataAccessKind.ReadWrite).ToColumn(columnName:
"CategoryDescription"
).IsNotNullable().HasColumnType(typeName:
"nvarchar"
).HasLength(length: 255);
}
public
void
Prepare_Category_AssociationConfigurations(MappingConfiguration<cCategory> configuration)
{
configuration.HasAssociation(x => x.ChildCategories).WithOpposite(x => x.ParentCategory).HasConstraint((x, y) => x.IdCategoryParent == y.IdCategory).IsManaged().WithDataAccessKind(DataAccessKind.ReadWrite);
}
#endregion
Table is created but no association and foreign key is created in DB.
With regards,
Marko