Here is the test code:
[DataContract]
public class SimpleDataContractModel
{
[Key]
[DataMember]
public int KeyProperty { get; set; }
[DataMember]
public string Name { get; set; }
[Required]
[DataMember]
public string RequiredAttribute { get; set; }
[DataMember(IsRequired = true)]
public string RequiredProperty2 { get; set; }
public string NotDataMember { get; set; }
[DataMember(IsRequired = true)]
public IgnoreMemberModel NavigationProperty1 { get; set; }
public IgnoreMemberModel NavigationProperty2 { get; set; }
}
public class IgnoreMemberModel
{
public int ID { get; set; }
public string Name { get; set; }
[NotMapped]
public string IgnoreProperty1 { get; set; }
[IgnoreDataMember]
public string IgnoreProperty2 { get; set; }
}
public class AttributeConventionModelBuilderTests
{
[Fact]
public void TestSimpleDataContractModel()
{
var builder = new ODataConventionModelBuilder();
builder.EntitySet<SimpleDataContractModel>("SimpleDataContractModels");
var model = builder.GetEdmModel();
var simpleDataContractModel = model.SchemaElements.OfType<IEdmEntityType>().First(t => t.Name == typeof(SimpleDataContractModel).Name);
Assert.Equal(5, simpleDataContractModel.Properties().Count());
Assert.Equal("KeyProperty", simpleDataContractModel.Key().Single().Name);
var requiredProperty2 = simpleDataContractModel.Properties().Single(p => p.Name == "RequiredProperty2") as EdmProperty;
Assert.Equal(false, requiredProperty2.Type.IsNullable);
var navigationProperty1 = simpleDataContractModel.Properties().Single(p => p.Name == "NavigationProperty1") as EdmNavigationProperty;
Assert.Equal(EdmMultiplicity.One, navigationProperty1.Multiplicity());
}
}
The last Assert fails because the property's multiplicity is ZeroOrOne, which means it's optional.
[DataContract]
public class SimpleDataContractModel
{
[Key]
[DataMember]
public int KeyProperty { get; set; }
[DataMember]
public string Name { get; set; }
[Required]
[DataMember]
public string RequiredAttribute { get; set; }
[DataMember(IsRequired = true)]
public string RequiredProperty2 { get; set; }
public string NotDataMember { get; set; }
[DataMember(IsRequired = true)]
public IgnoreMemberModel NavigationProperty1 { get; set; }
public IgnoreMemberModel NavigationProperty2 { get; set; }
}
public class IgnoreMemberModel
{
public int ID { get; set; }
public string Name { get; set; }
[NotMapped]
public string IgnoreProperty1 { get; set; }
[IgnoreDataMember]
public string IgnoreProperty2 { get; set; }
}
public class AttributeConventionModelBuilderTests
{
[Fact]
public void TestSimpleDataContractModel()
{
var builder = new ODataConventionModelBuilder();
builder.EntitySet<SimpleDataContractModel>("SimpleDataContractModels");
var model = builder.GetEdmModel();
var simpleDataContractModel = model.SchemaElements.OfType<IEdmEntityType>().First(t => t.Name == typeof(SimpleDataContractModel).Name);
Assert.Equal(5, simpleDataContractModel.Properties().Count());
Assert.Equal("KeyProperty", simpleDataContractModel.Key().Single().Name);
var requiredProperty2 = simpleDataContractModel.Properties().Single(p => p.Name == "RequiredProperty2") as EdmProperty;
Assert.Equal(false, requiredProperty2.Type.IsNullable);
var navigationProperty1 = simpleDataContractModel.Properties().Single(p => p.Name == "NavigationProperty1") as EdmNavigationProperty;
Assert.Equal(EdmMultiplicity.One, navigationProperty1.Multiplicity());
}
}
The last Assert fails because the property's multiplicity is ZeroOrOne, which means it's optional.