0

私は NHibernate のユーザーであり、NHibernate を使用すると非常に細かいモデルを作成できます。アプリケーションを NHibernate から Entity Framework に移植しています。

NHibernate を使用すると、次のようなものを定義できます。

public class User : DomainEntity
{
    public virtual Name Name { get; set; }
    ...
    public virtual ICollection<LogonInformation> LogonInformations { get; set; }
}

public class Name
{
    public virtual string FirstName { get; set; }
    public virtual string LastName { get; set; }
}

public class LogonInformation
{
    public virtual string Ip { get; set; }
    public virtual DateTime Date { get; set; }
}

Name と LogonInformation は < components > としてマップされます。特殊なケースでは、NHibernate がデータベースを作成するときに、LogonInformation テーブルに UserId を作成します。EntityFramework 5 を使用してこれを行うにはどうすればよいですか? 複合型を使用してみましたが、まだ次の例外が発生するため、機能していないようです。

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

\tSystem.Data.Entity.Edm.EdmEntityType: : EntityType 'LogonInformation' にはキーが定義されていません。この EntityType のキーを定義します。

\tSystem.Data.Entity.Edm.EdmEntitySet: EntityType: EntitySet 'LogonInformation' は、キーが定義されていないタイプ 'LogonInformation' に基づいています。

4

1 に答える 1

0

LogonInformationあなたの例外は、主キーがないことについて不平を言っています。Key主キーを確立するには、主キーにしたいプロパティに属性を追加します。たとえば、Ip主キーが主キーの場合、コードは次のようになります。

public class LogonInformation
{
    [Key]
    public virtual string Ip { get; set; }
    public virtual DateTime Date { get; set; }
}

更新: 変更できない場合はLogonInformation、Fluent-API で主キーを設定できます (この方法は好きではありませんが、問題を解決できます)。OnModelCreatingこれを行うには、次のようにコンテキストでメソッドをオーバーライドする必要があります。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<LogonInformation>().HasKey(logInfo => logInfo.Ip);
}
于 2013-03-29T04:01:29.130 に答える