0

EFコードファーストアプローチを使いたい。

私はこの投稿を読みました:

http://weblogs.asp.net/scottgu/archive/2010/07/16/code-first-development-with-entity-framework-4.aspx

BLクラスを作成しました

public class AppData
{
    public string Id { get; set; }

    public string Url { get; set; }

    public AppData_OptionsDialog OptionsDialog { get; set; }

    public AppData_Compatibility Compatibility { get; set; }

}

public class AppData_Compatibility
{
    public int Id { get; set; }

    public string Platform { get; set; }

    public string MaxVersion { get; set; }
}


public class AppData_OptionsDialog
{

    public int Id { get; set; }

    public string DisplayName { get; set; }

    public string AppDesc { get; set; }

    public string PrivacyPolicyUrl { get; set; }

    public string TermsOfUseUrl { get; set; }

}


public class AppsDataContext : System.Data.Entity.DbContext
{
    public AppsDataContext() : base("MaMDB") { }

    public DbSet<Conduit.Mam.Common.BlData.AppsData.AppData> AppsData { get; set; }

    public DbSet<Conduit.Mam.Common.BlData.AppsData.AppData_Compatibility> AppData_Compatibilities { get; set; }

    public DbSet<Conduit.Mam.Common.BlData.AppsData.AppData_OptionsDialog> AppData_OptionsDialogs { get; set; }       
}

DBに対応するテーブルを作成しました。

EFは設定より規約を使用していることを理解しています。

それで、それは魔法のようにクラスをDBにマップしますか?emを生成する必要はありません

私はメソッドのテストを実行しようとします:

    public IList<Conduit.Mam.Common.BlData.AppsData.AppData> GetAll()
    {
        var apps = from app in AppsDataContext.AppsData
               select app;

        return apps.ToList();
    }

ただし、次のエラーが発生します。

モデルの生成中に1つ以上の検証エラーが検出されました。

\ tSystem.Data.Entity.Edm.EdmEntityType:名前:スキーマ内の各タイプ名は一意である必要があります。タイプ名'AppData_OptionsDialog'はすでに定義されています。\ tSystem.Data.Entity.Edm.EdmEntityType:名前:スキーマ内の各タイプ名は一意である必要があります。タイプ名「AppData_Compatibility」はすでに定義されています。

私はこの答えを見ましたが、それは私を助けませんでした

EntityFrameworkエラー-「EntityContainer名は一意である必要があります」

4

1 に答える 1

0

私は問題が何であるかを知っていると思います.これは信じられないほど古いものですが、私は今同じ問題に遭遇しています.

public class User_Roles {
    public bool Admin { get; set; }
    public bool Moderator { get; set; }
    public virtual User User { get; set; }
}
public class User {
    public Guid Id { get; set; }
    public string Username { get; set; }
    public string Salt { get; set; }
    public string Password { get; set; }
    public virtual User_Roles Roles { get; set; }
}

この場合、次のように、User_Roles の名前を変更するか、User の Roles プロパティの名前を変更する必要があります。

public class URoles {
    public bool Admin { get; set; }
    public bool Moderator { get; set; }
    public virtual User User { get; set; }
}
public class User {
    public Guid Id { get; set; }
    public string Username { get; set; }
    public string Salt { get; set; }
    public string Password { get; set; }
    public virtual URoles Roles { get; set; }
}

または、User の "Roles" プロパティを単純に変更することもできます。

public class User_Roles {
    public bool Admin { get; set; }
    public bool Moderator { get; set; }
    public virtual User User { get; set; }
}
public class User {
    public Guid Id { get; set; }
    public string Username { get; set; }
    public string Salt { get; set; }
    public string Password { get; set; }
    public virtual User_Roles URoles { get; set; }
}

あなたの場合、これは次の場所で発生しています:

public AppData_OptionsDialog OptionsDialog { get; set; }
public AppData_Compatibility Compatibility { get; set; }

クラスの名前を変更するか、プロパティの名前を変更してください。

于 2015-06-26T20:19:46.447 に答える