Ignore property on model property

流过昼夜 提交于 2019-11-28 06:58:40

问题


How can I ignore a property on my model using dapper/dapper extensions/dapper rainbow or any

of those dapper libraries?


回答1:


Dapper creator Sam Saffron has addressed this requirement in response to another SO user's questions here. Check it out.

Also, if you want to use the Dapper Extensions library that Sam has mentioned in his answer, you can get it from Github or via Nuget.

Here's an example of ignoring properties from the Library's Test Project.

using System;
using System.Collections.Generic;
using DapperExtensions.Mapper;

namespace DapperExtensions.Test.Data
{
    public class Person
    {
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public DateTime DateCreated { get; set; }
        public bool Active { get; set; }
        public IEnumerable<Phone> Phones { get; private set; }
    }

    public class Phone
    {
        public int Id { get; set; }
        public string Value { get; set; }
    }

    public class PersonMapper : ClassMapper<Person>
    {
        public PersonMapper()
        {
            Table("Person");
            Map(m => m.Phones).Ignore();
            AutoMap();
        }
    }
}



回答2:


Dapper.Contrib has built-in support for marking a column as computed: add ComputedAttribute to allow support for computed columns on Insert. Here's how it works:

class MyModel
{
  public string Property1 { get; set; }

  [Computed]
  public int ComputedProperty { get; set; }
}

Properties marked with the Computed attribute will be ignored on inserts.




回答3:


In my case I used Dapper.Contrib.
Using [Write(false)] attribute on any property should solve the problem. Some also suggest using [Computed] attribute.

public class Person
{        
    [Key]
    public int Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }

    [Write(false)]
    public IEnumerable<Email> Emails { get; }
}



回答4:


You can design a base class without the computed property and use that for your inserts.

  class BasePerson
    {
      public String Name {get;set;}
    }

    class Person: BasePerson
    {
     public String ComputedProperty {get;set;}
    }

    Insert<BasePerson>(person);



回答5:


For those not wanting to include DapperExtensions, DatabaseGenerated from the standard System.ComponentModel.DataAnnotations.Schema can be used also.

[DatabaseGenerated(DatabaseGeneratedOption.Computed)]


来源:https://stackoverflow.com/questions/19716568/ignore-property-on-model-property

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!