3

例外は次のとおりです。

データベースが作成されてから、「ScannerContext」コンテキストをサポートするモデルが変更されました。Code First Migrations を使用してデータベースを更新することを検討してください ( http://go.microsoft.com/fwlink/?LinkId=238269 )。

アプリケーションを実行するたびにこれを取得します。私はそれが何を意味するのか理解できません。何かが正しくマッピングされていないことを意味していると思いますが、何が原因かわかりません。私はコード ファースト モデルを使用しており、完全にカスタム マッピングが必要な既存のデータベースがあります。現在、可能性のある原因を排除するために、クラス内のすべてにデータベースと同じ名前を付けています。

.Add()エンティティをコンテキストにしようとすると、例外がスローされます。

データベースにあるそのままのエンティティ

DB画像

私のDataLayerのエンティティ

public class EAsset
{
    public int i_GID { get; set; }
    public EAssetType Type { get; set; }
    public EOrgEnvironment Environment { get; set; }
    public EUser Contact { get; set; }
    public string s_Name { get; set; }
    public string s_Role { get; set; }
    public DateTime d_Added { get; set; }
    public DateTime d_LastUpdated { get; set; }
    public bool b_Retired { get; set; }

    public EAsset()
    {
        Type = new EAssetType();
        Environment = new EOrgEnvironment();
        Contact = new EUser();
        d_Added = DateTime.Now;
        d_LastUpdated = DateTime.Now;
    }
}

コンテキスト オブジェクト(テーブル マッピングとキー割り当てを試行)

public class ScannerContext : DbContext
{
    public ScannerContext()
        : base("LabDatabase") { }

    public DbSet<EAsset> EAssets { get; set; }
    public DbSet<EAssetType> EAssetTypes { get; set; }
    public DbSet<EOrgEnvironment> EOrgEnvironments { get; set; }
    public DbSet<EUser> EUsers { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<EAsset>().HasKey(k=>k.i_GID).ToTable("t_Assets");
        modelBuilder.Entity<EAssetType>().HasKey(k => k.i_ID).ToTable("t_Asset_Types");
        modelBuilder.Entity<EOrgEnvironment>().HasKey(k => k.i_ID).ToTable("t_Org_Environments");
        modelBuilder.Entity<EUser>().HasKey(k => k.i_ID).ToTable("t_Users");

        base.OnModelCreating(modelBuilder);

    }
}

プログラム

class Program
{
    static void Main(string[] args)
    {
        EAsset Entity = new EAsset { s_Name = "jewri-pc" };
        var sContext = new ScannerContext();
        sContext.EAssets.Add(Entity);
        sContext.SaveChanges();
    }
}
4

2 に答える 2

4

EFランタイムバージョン4.0.3/バージョン4.0の場合

public class ScannerContext : DbContext
{
    public ScannerContext()
        : base("LabDatabase") { }

    ...

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {

        Database.SetInitializer<ScannerContext>(null); // <--- This is what i needed

        ...

        base.OnModelCreating(modelBuilder);

    }
}

そのコードがインストールされているので、モデルですべての関係を説明することに関連するエラーを追跡しています。FK制約により、不足しているリレーショナルアイテムを追加する必要があります。

ここで情報が見つかりました。彼らはその重要性を少し説明しています。

<Da​​tabase>コンテキストをサポートするモデルは、データベースが作成されてから変更されました

于 2012-10-17T04:25:34.373 に答える