给定来自外部源的类(在我的例子中是NuGet包):
public class Apple {
// Some properties
}
在dbContext
中存储此内容的最佳方法是什么?
请注意,我不能使用以下内容,因为Apple没有Id:
DbSet<Apple> Apples {get; set;}
现在我的(天真)解决方案是使用mapper函数在已创建的数据库I中存储类似的类,然后在我想从NuGet包访问对象时调用它们。
感谢您的任何建议!
答案 0 :(得分:2)
为了解决这个问题,我可以提供两种解决方案:(你需要添加原始Apple类的适当参考)
我会创建一个继承自Apple类的类和一个Id属性。
public class MyApple: Apple
{
public int Id { get; set; }
}
然后将新创建的类添加到DbContext。
DbSet<MyApple> MyApples {get; set;}
第二个解决方案是创建一个类似上面的类,没有继承和引用Apple类。
public class MyApple
{
public int Id { get; set; }
public Apple Apple { get; set; }
}
将原始Apple类作为ComplexType
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.ComplexType<Apple>();
}
在第二个解决方案中,您将看到列名称; Apple_OriginalColumnName1,Apple_OriginalColumnName2
要解决这些问题,您可以使用Fluent Api中的HasColumnName更改那些。
(如果你可以修改Apple课程,但你不想在这里添加Id属性。不适合你的问题,但对其他人来说可能更简单..)
[ComplexType]
public class Apple
{
[Column("ColumnName1")]
public string ColumnName1 { get; set; }
...
}
[ComplexType] attributeof
该表是此处的核心解决方案。
[Column("ColumnName1")]
属性将修复Apple_ColumnName1
问题。