C# Data Annotations in Interface

前端 未结 2 506
遥遥无期
遥遥无期 2021-01-12 00:42

Quick question...

If I put a notation in the Interface...

Say [Required]

can I ommit that notation in the C# class for the property?

i.e. can

相关标签:
2条回答
  • 2021-01-12 01:24

    Placing the Data Annotation in the interface won't work. In the following link there is an explanation as to why: http://social.msdn.microsoft.com/Forums/en-US/adonetefx/thread/1748587a-f13c-4dd7-9fec-c8d57014632c/

    A simple explanation can be found by modifying your code as follows:

    interface IFoo
    {
       [Required]
       string Bar { get; set; }
    }
    
    interface IBar
    {
       string Bar { get; set; }
    }
    
    class Foo : IFoo, IBar
    {
       public string Bar { get; set; }
    }
    

    Then it is not clear as to whether the Bar string is required or not, since it is valid to implement more than one interface.

    0 讨论(0)
  • 2021-01-12 01:45

    The Data Annotation won't work but I don't know why.

    If you are using EF code first you can use Fluent API to force this behavior when creating your database. This is a workaround, not a real solution because only your database will check the constraint, not EF or any other system working with Data Annotation (well I suppose).

    I did it with

    public partial class MyDbContext : DbContext
    {
        // ... code ...
    
        protected override void OnModelCreating(DbModelBuilder dbModelBuilder)
        {
            dbModelBuilder.Types<IFoo>().Configure(y => y.Property(e => e.Bar).IsRequired());
        }
    }
    

    Telling the system that when it recognize a class implementing IFoo you configure the property to IsRequired.

    0 讨论(0)
提交回复
热议问题