私はEntity Framework 5 - コードを使用しています。エンティティフレームワークコードの異なるデータ型の列とエンティティのプロパティを最初にマップする方法
私は接続しているデータベースがありますが、これは既に存在しています(作成していません)。 T_Customers
という表があります。それはすべての顧客のリストを含んでいます。これは、(部分的にしか示さ)以下の構造を有する:
Customer_id | numeric (5, 0) | auto increment | not null (not set as primary key)
FName | varchar(50) | not null
LName | varchar(50) | not null
マイCustomer
クラス:
public class Customer : IEntity
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
マイIEntity
インターフェース:私は私のデータベースのコンテキストクラスに次のように持って
public interface IEntity
{
int Id { get; set; }
}
:
public class DatabaseContext : DbContext
{
public DatabaseContext(string connectionString)
: base(connectionString)
{
}
public DbSet<Customer> Customers { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new CustomerConfiguration());
}
public new DbSet<TEntity> Set<TEntity>()
where TEntity : class, IEntity
{
return base.Set<TEntity>();
}
}
私の顧客の設定クラス:
class CustomerConfiguration : EntityTypeConfiguration<Customer>
{
internal CustomerConfiguration()
{
this.ToTable("T_Customers");
this.Property(x => x.Id).HasColumnName("Customer_id");
this.Property(x => x.FirstName).HasColumnName("FName");
this.Property(x => x.LastName).HasColumnName("LName");
}
}
私は実体宣言で矛盾しないようにしようとしている、私はすべてのIDが整数である必要があります。この顧客IDはデータベース内の数値型で、すべての顧客のリストを返すときに問題に遭遇しています。データベース数値型からC#整数型にマップするにはどうすればよいですか?私はクラスのIDをnullableまたは10進数に変更していません。私のIDは常にnullでもなく整数です。私もデータベースを変更することはできません。
私は取得していますエラーは次のとおりです。
The 'Id' property on 'Customer' could not be set to a 'Decimal' value.
You must set this property to a non-null value of type 'Int32'.
ありがとう。 18、0と異なる精度が必要な場合はどうなりますか? 5,0の精度にこだわる方が良いですか? –
@BrendanVogtまあ、あなたはすでにデータベースがあると言ったので、精度は '5,0 'にとどまります。コードから新しいデータベースを生成する場合、この列の精度は「18,0」になります。したがって、すでに精度が「5,0」の場合は、何も変更する必要はありません。 BTW整数は99999より大きい値を持つ可能性があるので、心に留めておいてください。 –
ありがとう!これは私の一日を作った。 – tuseau