C# 代码优先迁移种子错误:未为类型';定义二进制运算符Equal;System.Nullable`1[System.Int32]';和';System.Int32';
在对数据库进行种子设定时,我的更新标识符存在以下问题:C# 代码优先迁移种子错误:未为类型';定义二进制运算符Equal;System.Nullable`1[System.Int32]';和';System.Int32';,c#,entity-framework,code-first,entity-framework-migrations,seed,C#,Entity Framework,Code First,Entity Framework Migrations,Seed,在对数据库进行种子设定时,我的更新标识符存在以下问题: context.ClientPromos.AddOrUpdate( cp => new { cp.ClientID, cp.Recommendation_ID, cp.PromoCode_ID }, new ClientPromo { ClientID = 0, Recommendation_ID
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();
既然cp.Recommendation\u ID
和cp.PromoCode\u ID
是int?数据类型
,它会得到以下错误:
未为类型定义二进制运算符Equal
'System.Nullable'1[System.Int32]'和'System.Int32'
我看过这篇文章,并添加了所描述的modelBuilder
-IsOptional()
代码,但它对我不起作用,我在中遇到了相同的错误
如果我改变:
cp => new { cp.ClientID, cp.Recommendation_ID, cp.PromoCode_ID }
致:
它工作得很好,但是如果我需要更新一条记录,这将不起作用。它将复制表中的每条记录。我不确定您是否熟悉,但长话短说,正如名称所示 可为null的类型可以表示其属性的正确值范围 基础值类型,加上一个附加的空值 您可以将普通类型分配给可为null的类型,但当值为
null
时,我们将遇到麻烦,因此编译器在编译时捕获此错误
然而,如果这是你唯一的一个问题,有更简单的方法来解决这个问题,一个简单的if语句将在分配之前解决所有问题
var myIntVar = myIntVar_Nullable ?? default(int);
哪个是语法上的糖
var myIntVar = myIntVar_Nullable == null ? default(int) : myIntVar_Nullable;
实体框架AddOrUpdate方法中存在错误。我在EF存储库中创建了一个问题:
但这仅在我为代码第一次迁移的addorupdate函数放置要标识的列时发生。我不知道我怎么能把这个应用到那个。如果我删除这些列,效果会很好,但这样做会继续向数据库中添加行,而不是更新行。我将更详细地研究它,然后您是否解决了问题?也许这会有帮助
var myIntVar = myIntVar_Nullable == null ? default(int) : myIntVar_Nullable;