Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将可空int映射到可空int+;汽车制造商_C#_Entity Framework_Mapping_Automapper - Fatal编程技术网

C# 将可空int映射到可空int+;汽车制造商

C# 将可空int映射到可空int+;汽车制造商,c#,entity-framework,mapping,automapper,C#,Entity Framework,Mapping,Automapper,我需要通过autompper将一个可为null的int映射到一个可为null的int 这是我的班级事件: public class Incident : Evenement { public Incident() : base(-1, Global.EvenementType.Incidents, DateTime.MinValue) { } public Incident(int id, DateTime date, string libell

我需要通过autompper将一个可为null的int映射到一个可为null的int

这是我的班级事件:

public class Incident : Evenement
{
    public Incident()
        : base(-1, Global.EvenementType.Incidents, DateTime.MinValue)
    {
    }

    public Incident(int id, DateTime date, string libelle,  int formulaireId,  string societe, string userName)
        : base(id, (int)Global.EvenementType.Incidents, date, libelle, "", "", societe)
    {
        ContratId = formulaireId;
        Contrat = null;
        UserName = userName;
    }

    public Incident(int id, DateTime date, string libelle, string societe, string userName)
        : base(id, (int)Global.EvenementType.Incidents, date, libelle, "", "", societe)
    {
        ContratId = null;
        Contrat = null;
        UserName = userName;
    }


    [DataMember]
    public int? ContratId { get; set; }

    [DataMember]
    public Contrat Contrat { get; set; }

    [DataMember]
    public string UserName { get; set; }

    [DataMember]
    public bool IsGeneral
这是我的班级事件

 public partial class INCIDENT : EVENEMENT
    {
        public Nullable<int> FORMULAIRE_ID { get; set; }
        public virtual FORMULAIRE FORMULAIRE { get; set; }
        public string USERNAME { get; set; }
    }
公共部分课程事件:晚上
{
公共可为空的FORMULAIRE_ID{get;set;}
公共虚拟公式化公式化{get;set;}
公共字符串用户名{get;set;}
}
当我在做映射时,contractid dans事件中有一个空值,它在类事件中的FORMULAIRE_ID中自动转换为0

 public partial class INCIDENT : EVENEMENT
    {
        public Nullable<int> FORMULAIRE_ID { get; set; }
        public virtual FORMULAIRE FORMULAIRE { get; set; }
        public string USERNAME { get; set; }
    }
这是我的装订

    Mapper.CreateMap<Incident, INCIDENT>()
            .ForMember(degivreuse => degivreuse.FORMULAIRE_ID, expression => expression.MapFrom(degivreuse => degivreuse.ContratId))
              .ForMember(degivreuse => degivreuse.FORMULAIRE, expression => expression.Ignore());
Mapper.CreateMap()
.ForMember(degivreuse=>degivreuse.FORMULAIRE_ID,expression=>expression.MapFrom(degivreuse=>degivreuse.contractid))
.ForMember(degivreuse=>degivreuse.FORMULAIRE,expression=>expression.Ignore());
在PJ中,问题是:

你知道我为什么不获取空值吗


关于

我没有发现Automapper处理
int?
的方式有任何问题。下面是一个很好用的快速示例:

public class Src1
{
    public string Name { get; set; }
    public int? Age { get; set; }
}

public class Dest1
{
    public string Name { get; set; }
    public Nullable<int> Age { get; set; }
}

Mapper.CreateMap<Src1, Dest1>();
Mapper.AssertConfigurationIsValid();

var s = new Src1 {Name = "aaa", Age = null};
var d = Mapper.Map<Src1, Dest1>(s);
公共类Src1
{
公共字符串名称{get;set;}
公共整数{get;set;}
}
公共类Dest1
{
公共字符串名称{get;set;}
公共可空年龄{get;set;}
}
CreateMap();
assertConfigurationsValid();
var s=newsrc1{Name=“aaa”,Age=null};
var d=映射器.Map(s);

在上面的示例中,
d.Age
null
。您能提供一些示例代码来重现您看到的问题吗?

今天,我在
AutoMapper 10.1.1
中偶然发现了同样的问题。 我试图将我的自定义类映射到DinkToPdf库中的MarginSettings类。 MarginSettings类有2个构造函数:

    public class MarginSettings
    {
        public Unit Unit { get; set; }

        public double? Top { get; set; }

        public double? Bottom { get; set; }

        public double? Left { get; set; }

        public double? Right { get; set; }

        public MarginSettings()
        {
            Unit = Unit.Millimeters;
        }

        public MarginSettings(double top, double right, double bottom, double left) : this()
        {
            Top = top;

            Bottom = bottom;

            Left = left;

            Right = right;
        }

        // the rest of class..
}

似乎出于某种原因,当AutoMapper试图将我的自定义类映射到它时,它正在调用MarginSettings类中带有参数的构造函数。这样,默认的
double
值(0)在此构造函数中设置为
double?
属性

下面是演示此问题的代码:

    class SourceClass
    {
        public double? Top { get; set; }

        public double? Bottom { get; set; }

        public double? Left { get; set; }

        public double? Right { get; set; }
    }

    class ClassWithoutCtor
    {
        public double? Top { get; set; }

        public double? Bottom { get; set; }

        public double? Left { get; set; }

        public double? Right { get; set; }
    }

    // The class similar to one in DinkToPdf library
    class ClassWithCtor
    {
        public string Message1 { get; set; }
        public string Message2 { get; set; }

        public double? Top { get; set; }

        public double? Bottom { get; set; }

        public double? Left { get; set; }

        public double? Right { get; set; }

        public ClassWithCtor() => this.Message1 = "in default ctor";

        public ClassWithCtor(double top, double right, double bottom, double left)
            : this()
        {
            this.Top = new double?(top);
            this.Bottom = new double?(bottom);
            this.Left = new double?(left);
            this.Right = new double?(right);
            Message2 = "in ctor with parameters";
        }
    }

    class AutoMapperTest
    {
        public void TryMapZeros()
        {
            var source = new SourceClass
            {
                Top = 5,
                Bottom = 5
            };

            var mapConfiguration = new MapperConfiguration(
                cfg =>
                {
                    cfg.CreateMap<SourceClass, ClassWithoutCtor>();
                    cfg.CreateMap<SourceClass, ClassWithCtor>();
                }
                );

            var mapper = mapConfiguration.CreateMapper();
            var margin1 = mapper.Map<SourceClass, ClassWithoutCtor>(source);
            var margin2 = mapper.Map<SourceClass, ClassWithCtor>(source);
        }
    }


您的代码应该成功地将null映射到null。我将从检查
FORMULAIRE\u ID
的所有写入用法开始。可能它的值在属性映射后改变了(在另一个属性设置器或其他什么东西中?)。不,它无论如何都不会改变!!!