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 データベースに投稿することだけです。
私は何を間違っていますか?