監査プロパティの抽象基本クラスがあります。簡潔にするために、1 つのプロパティがあるとします。
Public MustInherit Class AbstractAuditableEntity
...
Public Property CreatedTime() As DateTimeOffset
...
End Class
そして、私の監査可能なドメイン オブジェクトは、このクラスから継承します
Public Class Source
Inherits AbstractAuditableEntity
...
Public Property SourceId() As String
...
End Class
ドメインオブジェクト「ソース」をマップする次のテーブル DDL があります。基本的に、各 (具体的な) ドメイン オブジェクトとテーブルの関係は 1 対 1 であり、各テーブルには必要な監査列があります。
CREATE TABLE Source
(
SourceID VARCHAR(10) NOT NULL,
CreatedTime DATETIMEOFFSET(3) NOT NULL,
CONSTRAINT PK_Source PRIMARY KEY (SourceID))
GO
外部マッピング ファイルを使用して、クラスをテーブルにマップする最初の試みは次のようになります。
<?xml version="1.0" encoding="utf-8"?>
<Database Name="" xmlns="http://schemas.microsoft.com/linqtosql/mapping/2007">
<Table Name="Source" Member="Sources">
<Type Name ="Source">
<Column Name="SourceID" Member="SourceID" IsPrimaryKey="true" CanBeNull="false"/>
<Column Name="CreatedTime" Member="CreatedTime" />
</Type>
</Table>
</Database>
ただし、これにより次の例外が生成されます。
マッピングの列または関連付け 'CreatedTime' には、タイプ 'Source' に対応するメンバーがありませんでした。上記のルート タイプからのメンバーのマッピングはサポートされていません。
永続化レイヤーのコンテキスト内では、継承階層をそのまま表現しようとはしていませんが、アプリケーションのコンテキスト内では、すべてのドメイン オブジェクトに必要なプロパティを提供するために基本クラスを使用しているだけです。マッピング ファイル (監査列をベースの AbstractAuditableEntity 型にマッピングすることを含む) をいじったり、読み回したりしても、非常に単純な ORM タスクと認識しているものを達成できません。
どんな考えや提案も大歓迎です!ありがとう