2

BitFactory.Logging をアプリケーションにフックする作業を行っています。私の 1 つの変更点は、LogEvent を MySQL データベースに投稿していることです。Code First の実行、EF 4.1。

次のようにカスタム db ロガーを作成しました。

public class DBLogger : Logger
{
    protected override bool DoLog(LogEntry aLogEntry)
    {
        _db.Add(aLogEntry);
        _db.SaveChanges();
        return true;
    }
    private static IDbContext _db = new MyDB();
    public static IDbContext db
    {
        get { return _db; }
    }
}

私は次のクラスを持っています:

public class LEntry
{
    public virtual LogEntry logEntry { get; set; }
}

}

次の IDbContext があります。

public interface IDbContext
{

    IQueryable<LEntry> LEntries { get; }
    int SaveChanges();
    T Attach<T>(T entity) where T : class;
    T Add<T>(T entity) where T : class;
    T Delete<T>(T entity) where T : class;
}

そして次の

public class MyDB : DbContext, IDbContext
{
    public DbSet<LEntry> LEntries { get; set; }

    IQueryable<LEntry> IDbContext.LEntries
    {
        get { return LEntries; }
    }

    int IDbContext.SaveChanges()
    {
        return SaveChanges();
    }

    T IDbContext.Add<T>(T entity) 
    {
        return Set<T>().Add(entity);
    }

    T IDbContext.Delete<T>(T entity) 
    {
        return Set<T>().Remove(entity);            
    }

    T IDbContext.Attach<T>(T entity)
    {                      
        var entry = Entry(entity);
        entry.State = System.Data.EntityState.Modified;
        return entity;
    }
}

コードを実行すると、次のエラーが表示されます。

「System.Data.Edm.EdmEntityType:: EntityType 'LEntry' にはキーが定義されていません。この EntityType のキーを定義してください。」

LEntry クラスを

public class LEntry
{
    [Key]
    public virtual int ID { get; set; }
    public virtual LogEntry logEntry { get; set; }
}

}

実行すると、次のエラーが表示されます。

「型 'LogEntry' は複合型としてマップされています。Set メソッド、DbSet オブジェクト、および DbEntityEntry オブジェクトは、複合型ではなく、エンティティ型でのみ使用できます。」

次のように LEntry を ComplexType に変更すると:

[ComplexType]
public class LEntry
{
    [Key]
    public virtual int ID { get; set; }
    public virtual LogEntry logEntry { get; set; }
}

次に、次のエラーが表示されます。

「型 'MyDB.Models.LEntry' は既にエンティティ型として構成されています。複合型として再構成することはできません。」

に投げられる

    T IDbContext.Add<T>(T entity) 
    {
        return Set<T>().Add(entity);
    }

ブロック。

私がやろうとしているのは、DoLog メソッドを MySQL データベースに投稿することだけです。

私は何を間違っていますか?

4

0 に答える 0