C# 没有给出与所需形式参数';id';xxx的
我正在尝试实例化这个类: 班级:C# 没有给出与所需形式参数';id';xxx的,c#,.net-5,C#,.net 5,我正在尝试实例化这个类: 班级: using System.Text.Json.Serialization; public class GroceryItemTag { [JsonConstructor] public GroceryItemTag(string name, GroceryItemTagEnum id, int iconCodePoint) { Id = id; IconCodePoint = iconCodePoint;
using System.Text.Json.Serialization;
public class GroceryItemTag
{
[JsonConstructor]
public GroceryItemTag(string name, GroceryItemTagEnum id, int iconCodePoint)
{
Id = id;
IconCodePoint = iconCodePoint;
Name = name;
}
public GroceryItemTagEnum Id { get; set; }
public int IconCodePoint { get; set; }
public string Name { get; set; }
}
我得到了这个错误:
There is no argument given that corresponds to the required formal parameter 'id' of 'GroceryItemTag.GroceryItemTag(GroceryItemTagEnum, int, string)'
这里我尝试实例化该类(枚举是int):
数据库上下文:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.Json;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.ChangeTracking;
namespace Vepo.Domain
{
public class VepoContext : DbContext
{
public VepoContext(DbContextOptions<VepoContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<GroceryItemGroceryStore>().HasKey(table => new
{
table.GroceryItemId,
table.GroceryStoreId
});
builder.Entity<MenuItemRestaurant>().HasKey(table => new
{
table.MenuItemId,
table.RestaurantId
});
builder.Entity<GroceryItemTag>()
.Property(tag => tag.Id)
.ValueGeneratedNever();
builder.Entity<MenuItemTag>()
.Property(tag => tag.Id)
.ValueGeneratedNever();
builder.Entity<GroceryItemTag>().HasData(
new GroceryItemTag[] {
new GroceryItemTag(
"Baby & Child",
GroceryItemTagEnum.BabyAndChild,
0xf77c
),
new GroceryItemTag(
"Baking",
GroceryItemTagEnum.Baking,
0xf563
),
new GroceryItemTag (
"Beer & Wine",
GroceryItemTagEnum.BeerAndWine,
0xf4e3
),
new GroceryItemTag (
"Condiments",
GroceryItemTagEnum.Condiments,
0xf72f
),
new GroceryItemTag (
"Confectionary",
GroceryItemTagEnum.Confectionary,
0xf819
),
new GroceryItemTag (
"Cooking",
GroceryItemTagEnum.Cooking,
0xe01d
),
new GroceryItemTag (
"Dessert",
GroceryItemTagEnum.Dessert,
0xf810
),
new GroceryItemTag (
"Drinks",
GroceryItemTagEnum.Drinks,
0xf804
),
new GroceryItemTag (
"Faux Meat",
GroceryItemTagEnum.FauxMeat,
0xf814
),
new GroceryItemTag (
"Faux Dairy",
GroceryItemTagEnum.FauxDairy,
0xf7f0
),
new GroceryItemTag (
"Faux Seafood",
GroceryItemTagEnum.FauxSeafood,
0xf7fe
),
new GroceryItemTag (
"Fridge & Deli",
GroceryItemTagEnum.FridgeAndDeli,
0xe026
),
new GroceryItemTag (
"Frozen",
GroceryItemTagEnum.Frozen,
0xf7ad
),
new GroceryItemTag (
"Bathroom",
GroceryItemTagEnum.Bathroom,
0xe06b
),
new GroceryItemTag (
"Health Food",
GroceryItemTagEnum.HealthFood,
0xf787
),
new GroceryItemTag (
"Household",
GroceryItemTagEnum.HouseHold,
0xf898
),
new GroceryItemTag (
"Pantry",
GroceryItemTagEnum.Pantry,
0xf7eb
),
new GroceryItemTag (
"Pet",
GroceryItemTagEnum.Pet,
0xf6d3
),
new GroceryItemTag (
"Other",
GroceryItemTagEnum.Other,
0xf39b
}});
builder.Entity<MenuItemTag>().HasData(
new MenuItemTag[] {
new MenuItemTag {
Name = "American",
Id = MenuItemTagEnum.American,
IconCodePoint = 0xf803
},
new MenuItemTag {
Name = "Asian",
Id = MenuItemTagEnum.Asian,
IconCodePoint = 0xf823
},
new MenuItemTag {
Name = "Bakery",
Id = MenuItemTagEnum.Bakery,
IconCodePoint = 0xf705
},
new MenuItemTag {
Name = "Barbecue",
Id = MenuItemTagEnum.Barbecue,
IconCodePoint = 0xf80f
},
new MenuItemTag {
Name = "Breakfast",
Id = MenuItemTagEnum.Breakfast,
IconCodePoint = 0xe002
},
new MenuItemTag {
Name = "Cafe",
Id = MenuItemTagEnum.Cafe,
IconCodePoint = 0xf6c5
},
new MenuItemTag {
Name = "Chinese",
Id = MenuItemTagEnum.Chinese,
IconCodePoint = 0xf823
},
new MenuItemTag {
Name = "Deli",
Id = MenuItemTagEnum.Deli,
IconCodePoint = 0xf81f
},
new MenuItemTag {
Name = "Desserts",
Id = MenuItemTagEnum.Desserts,
IconCodePoint = 0xf551
},
new MenuItemTag {
Name = "European",
Id = MenuItemTagEnum.European,
IconCodePoint = 0xf7a2
},
new MenuItemTag {
Name = "Fish & Chips",
Id = MenuItemTagEnum.FishAndChips,
IconCodePoint = 0xf7fe
},
new MenuItemTag {
Name = "Indian",
Id = MenuItemTagEnum.Indian,
IconCodePoint = 0xf156
},
new MenuItemTag {
Name = "French",
Id = MenuItemTagEnum.Fench,
IconCodePoint = 0xf7f6
},
new MenuItemTag {
Name = "German",
Id = MenuItemTagEnum.German,
IconCodePoint = 0xf820
},
new MenuItemTag {
Name = "Greek",
Id = MenuItemTagEnum.Greek,
IconCodePoint = 0xf68b
},
new MenuItemTag {
Name = "Health Food",
Id = MenuItemTagEnum.HealthFood,
IconCodePoint = 0xf81e
},
new MenuItemTag {
Name = "Italian",
Id = MenuItemTagEnum.Italian,
IconCodePoint = 0xf817
},
new MenuItemTag {
Name = "Japanese",
Id = MenuItemTagEnum.Japanese,
IconCodePoint = 0xf56a
},
new MenuItemTag {
Name = "Kebab",
Id = MenuItemTagEnum.Kebab,
IconCodePoint = 0xf821
},
new MenuItemTag {
Name = "Kiwi",
Id = MenuItemTagEnum.Kiwi,
IconCodePoint = 0xf535
},
new MenuItemTag {
Name = "Korean",
Id = MenuItemTagEnum.Korean,
IconCodePoint = 0xf159
}});
builder.Entity<GroceryItem>()
.Property(e => e.Tags)
.HasConversion(
v => JsonSerializer.Serialize(v, null),
v => JsonSerializer.Deserialize<List<GroceryItemTag>>(v, null),
new ValueComparer<IList<GroceryItemTag>>(
(c1, c2) => c1.SequenceEqual(c2),
c => c.Aggregate(0, (a, v) => HashCode.Combine(a, v.GetHashCode())),
c => (IList<GroceryItemTag>)c.ToList()));
}
public DbSet<GroceryItem> GroceryItems { get; set; }
public DbSet<GroceryItemGroceryStore> GroceryItemGroceryStores { get; set; }
public DbSet<MenuItemRestaurant> MenuItemRestaurants { get; set; }
public DbSet<MenuItem> MenuItems { get; set; }
public DbSet<GroceryStore> GroceryStores { get; set; }
public DbSet<GroceryItemTag> GroceryItemTags { get; set; }
public DbSet<MenuItemTag> MenuItemTags { get; set; }
public DbSet<Restaurant> Restaurants { get; set; }
}
}
但我改变了
悬停错误:
为什么我会犯这个错误
请尝试完全限定名称:
我将GroceryItemTag添加到
名称空间Vepo.Domain
。现在,当我单击GroceryItemTag
上的go to definition(转到定义)时,它会将我带到GroceryItemTag的构造函数。然后转到GRoceryItemTag的定义。GRoceryItemTag表示未找到定义。右键单击new GRoceryItemTag
中的GRoceryItemTag
,然后转到定义,确保VS已解析与您的JsonConstructor
匹配的正确定义
这种类型的错误看起来像是名称空间问题,但编译器显然不清楚代码的方式
还可以尝试在新表达式中使用完全限定的类型名,这可能有助于识别冲突
builder.Entity<GroceryItemTag>().HasData(
new Vepo.Domain.GroceryItemTag[] {
new Vepo.Domain.GroceryItemTag(
"Baby & Child",
GroceryItemTagEnum.BabyAndChild,
0xf77c
),
new Vepo.Domain.GroceryItemTag(
"Baking",
GroceryItemTagEnum.Baking,
0xf563
),...
builder.Entity().HasData(
新的Vepo.Domain.GroceryItemTag[]{
新建Vepo.Domain.GroceryItemTag(
“婴儿与儿童”,
食品杂货店婴儿食品店,
0xf77c
),
新建Vepo.Domain.GroceryItemTag(
“烘焙”,
食品杂货店,
0xf563
),...
因为你说的是c#5,我想说它与模式匹配有关,但我不能复制它。Huh。错误中的方法签名与构造函数签名不同。这很奇怪。有没有扩展方法可以从枚举转换为Int?你应该包括GroceryAgen的部分或全部定义嗯,但是检查名称空间,在C#5中,它可能试图进行模式匹配,因为另一个错误导致DLL无法首先编译。请查看关于发布代码的指导…特别是问题中缺少您可能想要阅读的JSON…以及与JSON相关的代码…post中显示的代码编译得非常好…一个d运行(假设基本public enum GroceryItemTagEnum{Baking,BabyAndChild};
并忽略未知builder
part)谢谢@AlexeiLevenkov,但这里没有json…@JohnG这只是意味着其他地方有一个相互竞争的定义,或者一个类似的命名类型。无论哪种方式,只有OP可以在前面的所有代码中找到这一点。当我右键单击“转到定义”时,它会转到正确的定义,但当我尝试使用完全限定名时,它不存在,请参阅关于这个问题的全部细节,请参见我问题的新底部。因此它实际上应该是new Vepo.Domain.GroceryItemTag(…
您使用的新语法现在无效。(尽管没有点;)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.Json;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.ChangeTracking;
namespace Vepo.Domain
{
public class VepoContext : DbContext
{
public VepoContext(DbContextOptions<VepoContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<GroceryItemGroceryStore>().HasKey(table => new
{
table.GroceryItemId,
table.GroceryStoreId
});
builder.Entity<MenuItemRestaurant>().HasKey(table => new
{
table.MenuItemId,
table.RestaurantId
});
builder.Entity<GroceryItemTag>()
.Property(tag => tag.Id)
.ValueGeneratedNever();
builder.Entity<MenuItemTag>()
.Property(tag => tag.Id)
.ValueGeneratedNever();
builder.Entity<GroceryItemTag>().HasData(
new GroceryItemTag[] {
new GroceryItemTag(
"Baby & Child",
GroceryItemTagEnum.BabyAndChild,
0xf77c
),
new GroceryItemTag(
"Baking",
GroceryItemTagEnum.Baking,
0xf563
),
new GroceryItemTag (
"Beer & Wine",
GroceryItemTagEnum.BeerAndWine,
0xf4e3
),
new GroceryItemTag (
"Condiments",
GroceryItemTagEnum.Condiments,
0xf72f
),
new GroceryItemTag (
"Confectionary",
GroceryItemTagEnum.Confectionary,
0xf819
),
new GroceryItemTag (
"Cooking",
GroceryItemTagEnum.Cooking,
0xe01d
),
new GroceryItemTag (
"Dessert",
GroceryItemTagEnum.Dessert,
0xf810
),
new GroceryItemTag (
"Drinks",
GroceryItemTagEnum.Drinks,
0xf804
),
new GroceryItemTag (
"Faux Meat",
GroceryItemTagEnum.FauxMeat,
0xf814
),
new GroceryItemTag (
"Faux Dairy",
GroceryItemTagEnum.FauxDairy,
0xf7f0
),
new GroceryItemTag (
"Faux Seafood",
GroceryItemTagEnum.FauxSeafood,
0xf7fe
),
new GroceryItemTag (
"Fridge & Deli",
GroceryItemTagEnum.FridgeAndDeli,
0xe026
),
new GroceryItemTag (
"Frozen",
GroceryItemTagEnum.Frozen,
0xf7ad
),
new GroceryItemTag (
"Bathroom",
GroceryItemTagEnum.Bathroom,
0xe06b
),
new GroceryItemTag (
"Health Food",
GroceryItemTagEnum.HealthFood,
0xf787
),
new GroceryItemTag (
"Household",
GroceryItemTagEnum.HouseHold,
0xf898
),
new GroceryItemTag (
"Pantry",
GroceryItemTagEnum.Pantry,
0xf7eb
),
new GroceryItemTag (
"Pet",
GroceryItemTagEnum.Pet,
0xf6d3
),
new GroceryItemTag (
"Other",
GroceryItemTagEnum.Other,
0xf39b
}});
builder.Entity<MenuItemTag>().HasData(
new MenuItemTag[] {
new MenuItemTag {
Name = "American",
Id = MenuItemTagEnum.American,
IconCodePoint = 0xf803
},
new MenuItemTag {
Name = "Asian",
Id = MenuItemTagEnum.Asian,
IconCodePoint = 0xf823
},
new MenuItemTag {
Name = "Bakery",
Id = MenuItemTagEnum.Bakery,
IconCodePoint = 0xf705
},
new MenuItemTag {
Name = "Barbecue",
Id = MenuItemTagEnum.Barbecue,
IconCodePoint = 0xf80f
},
new MenuItemTag {
Name = "Breakfast",
Id = MenuItemTagEnum.Breakfast,
IconCodePoint = 0xe002
},
new MenuItemTag {
Name = "Cafe",
Id = MenuItemTagEnum.Cafe,
IconCodePoint = 0xf6c5
},
new MenuItemTag {
Name = "Chinese",
Id = MenuItemTagEnum.Chinese,
IconCodePoint = 0xf823
},
new MenuItemTag {
Name = "Deli",
Id = MenuItemTagEnum.Deli,
IconCodePoint = 0xf81f
},
new MenuItemTag {
Name = "Desserts",
Id = MenuItemTagEnum.Desserts,
IconCodePoint = 0xf551
},
new MenuItemTag {
Name = "European",
Id = MenuItemTagEnum.European,
IconCodePoint = 0xf7a2
},
new MenuItemTag {
Name = "Fish & Chips",
Id = MenuItemTagEnum.FishAndChips,
IconCodePoint = 0xf7fe
},
new MenuItemTag {
Name = "Indian",
Id = MenuItemTagEnum.Indian,
IconCodePoint = 0xf156
},
new MenuItemTag {
Name = "French",
Id = MenuItemTagEnum.Fench,
IconCodePoint = 0xf7f6
},
new MenuItemTag {
Name = "German",
Id = MenuItemTagEnum.German,
IconCodePoint = 0xf820
},
new MenuItemTag {
Name = "Greek",
Id = MenuItemTagEnum.Greek,
IconCodePoint = 0xf68b
},
new MenuItemTag {
Name = "Health Food",
Id = MenuItemTagEnum.HealthFood,
IconCodePoint = 0xf81e
},
new MenuItemTag {
Name = "Italian",
Id = MenuItemTagEnum.Italian,
IconCodePoint = 0xf817
},
new MenuItemTag {
Name = "Japanese",
Id = MenuItemTagEnum.Japanese,
IconCodePoint = 0xf56a
},
new MenuItemTag {
Name = "Kebab",
Id = MenuItemTagEnum.Kebab,
IconCodePoint = 0xf821
},
new MenuItemTag {
Name = "Kiwi",
Id = MenuItemTagEnum.Kiwi,
IconCodePoint = 0xf535
},
new MenuItemTag {
Name = "Korean",
Id = MenuItemTagEnum.Korean,
IconCodePoint = 0xf159
}});
builder.Entity<GroceryItem>()
.Property(e => e.Tags)
.HasConversion(
v => JsonSerializer.Serialize(v, null),
v => JsonSerializer.Deserialize<List<GroceryItemTag>>(v, null),
new ValueComparer<IList<GroceryItemTag>>(
(c1, c2) => c1.SequenceEqual(c2),
c => c.Aggregate(0, (a, v) => HashCode.Combine(a, v.GetHashCode())),
c => (IList<GroceryItemTag>)c.ToList()));
}
public DbSet<GroceryItem> GroceryItems { get; set; }
public DbSet<GroceryItemGroceryStore> GroceryItemGroceryStores { get; set; }
public DbSet<MenuItemRestaurant> MenuItemRestaurants { get; set; }
public DbSet<MenuItem> MenuItems { get; set; }
public DbSet<GroceryStore> GroceryStores { get; set; }
public DbSet<GroceryItemTag> GroceryItemTags { get; set; }
public DbSet<MenuItemTag> MenuItemTags { get; set; }
public DbSet<Restaurant> Restaurants { get; set; }
}
}
public class GroceryItemTag
{
public GroceryItemTagEnum Id { get; set; }
public int IconCodePoint {get; set;}
public string Name { get; set; }
}
builder.Entity<GroceryItemTag>().HasData(
new Vepo.Domain.GroceryItemTag[] {
new Vepo.Domain.GroceryItemTag(
"Baby & Child",
GroceryItemTagEnum.BabyAndChild,
0xf77c
),
new Vepo.Domain.GroceryItemTag(
"Baking",
GroceryItemTagEnum.Baking,
0xf563
),...