代码优先迁移种子错误:没有为类型'System.Nullable`1 [System.Int32]'和'System.Int32'定义二进制运算符Equal

Bri*_*uce 10 c# entity-framework seed code-first ef-migrations

在播种到我的数据库时,我的更新标识符存在以下问题:

context.ClientPromos.AddOrUpdate(
            cp => new { cp.ClientID, cp.Recommendation_ID, cp.PromoCode_ID },

            new ClientPromo
            {
                ClientID = 0,
                Recommendation_ID = Rec30Off.RecommendationID,
                PromoCode_ID = pc30PerOffProd.PromoCodeID
            },
            new ClientPromo
            {
                ClientID = 0,
                Recommendation_ID = RecKnow.RecommendationID,
            },

            new ClientPromo
            {
                ClientID = 0,
                Recommendation_ID = RecCall.RecommendationID,
            },
);

context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

既然cp.Recommendation_IDcp.PromoCode_IDint? datatypes,它会收到以下错误:

没有为类型'System.Nullable`1 [System.Int32]'和'System.Int32'定义二元运算符Equal.

我查看了这篇文章,并添加了modelBuilder- IsOptional()所描述的代码,但它对我不起作用,我在这个问题中得到了同样的错误.

如果我改变:

cp => new { cp.ClientID, cp.Recommendation_ID, cp.PromoCode_ID }
Run Code Online (Sandbox Code Playgroud)

至:

cp => new { cp.ClientID }
Run Code Online (Sandbox Code Playgroud)

它工作正常,但是如果我需要更新记录它将只复制表中的每个记录,这将不起作用.

Rad*_*rka 6

Entity Framework AddOrUpdate方法中存在错误.我在EF存储库中创建了一个问题:

https://github.com/aspnet/EntityFramework6/issues/9

  • 是否有可以应用的解决方法? (2认同)

Meh*_*rad -1

我不确定您对可空类型(C# 编程指南)有多熟悉,但长话短说,正如其名称所代表的那样,

可空类型可以表示其基础值类型的正确值范围,以及附加的空值。

您可以将普通类型分配给可为 null 的类型,但反之则不然,因为当值为 null 时null我们会遇到麻烦,因此编译器会在编译时捕获此错误。

但是,如果这是您唯一的方法,则有更简单的方法可以解决此问题,并且一个简单的 if 语句将在分配之前解决所有问题。

var myIntVar = myIntVar_Nullable ?? default(int);
Run Code Online (Sandbox Code Playgroud)

这是一个语法糖

var myIntVar = myIntVar_Nullable == null ? default(int) : myIntVar_Nullable;
Run Code Online (Sandbox Code Playgroud)