2016-11-28 8 views
1

私は、継承マッピングと埋め込みオブジェクトを含むlinq2dbマッピングの複雑な例をテストしようとしています。テストプロジェクトの例に従いますが、挿入操作で例外が発生します。テストプロジェクトで挿入操作や更新操作の例が見つかりませんでした。多分私は何か間違っています。 "いけない挿入で子供を投げ、" テストケース私が手linq2db継承マッピング付き挿入

[Table] 
    [Column("SomeString", "SomeModel.SomeString")] 
    [InheritanceMapping(Code = "code1", Type = typeof(Child1))] 
    [InheritanceMapping(Code = "code2", Type = typeof(Child2))] 
    public abstract class Parent 
    { 
     [PrimaryKey] 
     public int Id { get; } 

     public SomeModel SomeModel { get; private set; } 

     [Column(IsDiscriminator = true)] 
     public string DType { get; set; } 

     protected Parent(int id, SomeModel someModel) 
     { 
      Id = id; 
      SomeModel = someModel; 
     } 
    } 

    public class SomeModel 
    { 
     public SomeModel(string someString) 
     { 
      SomeString = someString; 
     } 

     [NotNull] 
     public string SomeString { get; } 

     internal SomeModel() 
     { 
     } 
    } 

    public class Child1 : Parent 
    { 
     public Child1(int id, SomeModel someModel, int threshold) : base(id, someModel) 
     { 
      Threshold = threshold; 
      DType = "child1"; 
     } 

     [Column] 
     public int Threshold { get; } 
    } 

    public class Child2 : Parent 
    { 
     public Child2(int id, SomeModel someModel, string code) : base(id, someModel) 
     { 
      Code = code; 
      DType = "child2"; 
     } 

     [Column] 
     public string Code { get; private set; } 
    } 

    [Test] 
    [TestCase("Dont cast child in insert")] 
    [TestCase("Cast child in insert")] 
    public void TestInheritanceMapping(string testMode) 
    { 
     var db = new DbNorthwind(); 
     db.Execute(@"IF OBJECT_ID('dbo.Parent', 'U') IS NOT NULL 
         drop table Parent"); 
     db.CreateTable<Parent>(); 
     Console.WriteLine(db.GetTable<Child1>().Select(c => c.Threshold).Any()); 
     switch (testMode) 
     { 
      case "Dont cast child in insert": 
       db.Insert(new Child1(1, new SomeModel("SomeString"), 1)); 
       db.Insert(new Child2(1, new SomeModel("SomeString"), "somecode!")); 
       break; 
      case "Cast child in insert": 
       db.Insert<Parent>(new Child1(1, new SomeModel("SomeString"), 1)); 
       db.Insert<Parent>(new Child2(1, new SomeModel("SomeString"), "somecode!")); 
       break; 
     } 
    } 

    public class DbNorthwind : DataConnection 
    { 
     public DbNorthwind() : base("SqlServer", From.ConnectionStrings.Get("storage.sqlserver")) 
     { 
     } 
    } 

"System.Data.SqlClient.SqlException:無効なオブジェクト名 'CHILD1'"

"インサート内キャストの子" で

"System.ArgumentExceptionの: "しきい値" はタイプのメンバーではない"

テーブル "親" が作成されますが適切に "db.CreateTable();"ステップ: enter image description here

また、選択動作が助けを

おかげで動作するようです!

答えて

1

ご迷惑をおかけして申し訳ありません。

[Table("Parent")] // Here it is 
[Column("SomeString", "SomeModel.SomeString")] 
[InheritanceMapping(Code = "code1", Type = typeof(Child1))] 
[InheritanceMapping(Code = "code2", Type = typeof(Child2))] 
public abstract class Parent 
{ 
    //... 
} 
:あなたの親タイプのテーブル名を指定する必要があります。この場合

関連する問題