gpt4 book ai didi

c# - 必须不可为空才能用作参数 'T'

转载 作者:太空狗 更新时间:2023-10-29 21:34:56 24 4
gpt4 key购买 nike

我试图用我自己的对象类型创建一个 Code First 类并得到这个错误:

.MTObject' must be a non-nullable value type in order to use it as parameter 'T' in the generic type or method 'System.Data.Entity.ModelConfiguration.Configuration.StructuralTypeConfiguration<TStructuralType>.Property<T>(System.Linq.Expressions.Expression<System.Func<TStructuralType,T>>)'

有没有办法声明我的类属性来克服这个错误?

代码如下:

// Simple Example

public class MTObject
{
public string Object { get; set; }

public MTObject()
{

}
}

public class Person
{
public decimal Id { get; set; }

//public string Name { get; set; }

public MTObject Name { get; set; }

public Int32 Age { get; set; }
}

public class PersonConfiguration : EntityTypeConfiguration<Person>
{
public PersonConfiguration() : base()
{
HasKey(p => p.Id);
Property(p => p.Id).HasColumnName("ID").HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
Property(p => p.Name).HasColumnName("NAME").IsOptional();
Property(p => p.Age).HasColumnName("AGE").IsOptional();
ToTable("Person");
}
}

public class PersonDataBase : DbContext
{
public DbSet<Person> Persons { get; set; }

public PersonDataBase(string connectionString) : base(connectionString)
{
Database.CreateIfNotExists();
}

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new PersonConfiguration());
base.OnModelCreating(modelBuilder);
}
}

// End Simple EXample

最佳答案

为了编译这一行...

Property(p => p.Age).HasColumnName("AGE").IsOptional();

...您需要使 Age 属性可为空:

public Nullable<Int32> Age { get; set; }

(或 public int?Age { get; set; })

或者您不能将该属性指定为可选属性,而需要将其用作必需属性。

编辑

我上面的回答是错误的。这不是编译器错误的原因。但是,如果 Age 属性应该是可选的,则它仍然必须可以为 null,即允许 null 值。

编辑2

在您的模型中,MTObject 是一个复杂类型(不是实体),因为按照惯例 EF 无法推断出主键属性。对于复杂类型,您可以将嵌套属性映射为:

Property(p => p.Name.Object).HasColumnName("NAME");

(假设您实际上想为 Object 属性指定列名称)使用 is IsOptional() 不是必需的,因为 string默认情况下属性是可选的。

关于c# - 必须不可为空才能用作参数 'T',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13184760/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com