2016-07-21 40 views
0

添加到非抽象的導航屬性的引用是好的:實體框架 - 添加引用抽象的導航性能,而無需加載

class Entity { 
    int Id { get; set; } 

    Reference Reference { get; set; } 
    Parent Other { get; set; } 
} 

class Reference { 
    int Id { get; set; } 
} 

abstract class Parent { 
    int Id { get; set; } 
} 

class Child : Parent { } 

async Task DbMethod() { 
    using(var context = new XYZDbContext()) { 
     var reference = new Reference { Id = 6 }; 
     context.Attach(reference); 

     var entity = new Entity { 
      Id = 3, 
      Reference = reference, 
     }; 

     context.Add(entity); 

     await context.SaveChangesAsync(); 
    } 
} 

但是,如果我想的Other屬性設置爲現有的記錄(比如ID 42),我不能實例化Parent類(因爲它是抽象的),就像我對Reference類所做的那樣。

如何爲抽象Parent類添加對現有實體的引用?我想,我可以一個OtherId屬性添加到Entity類和設置,但我想,以避免污染實體如果可能的話

回答

0

爲什麼你的抽象類不會更改爲一個非抽象的

class Parent { 
    int Id { get; set; } 
} 

所以你現在可以實例化它,並且行爲是相同的。 根據您的示例,您的抽象類沒有表現爲抽象類。

+0

這個例子是爲了簡潔起見而設計的。該課程必須是抽象的 – flipchart