给定一个来自外部源的类(在我的例子中是一个 NuGet 包):
public class Apple {
// Some properties
}
将其存储在 dbContext
中的最佳方法是什么?
请注意,我不能使用以下内容,因为 Apple 没有 Id:
DbSet<Apple> Apples {get; set;}
现在我的(天真的)解决方案是让映射器函数在我创建的数据库中存储一个类似的类,然后在我想从 NuGet 包访问对象时调用这些函数。
感谢您的任何建议!
最佳答案
为了解决这个问题,我可以提供两种解决方案:(您需要添加对原始 Apple 类的适当引用)
第一个解决方案(继承 - 更简单的一个)
我会创建一个继承自 Apple 类的类和一个 Id 属性。
public class MyApple: Apple
{
public int Id { get; set; }
}
然后将新创建的类添加到 DbContext。
DbSet<MyApple> MyApples {get; set;}
第二种解决方案(使用 ComplexType)
第二种解决方案是创建一个与上述类似的类,但不继承并引用 Apple 类。
public class MyApple
{
public int Id { get; set; }
public Apple Apple { get; set; }
}
并将原始的 Apple 类设为 ComplexType
a) 通过 Fluent Api(在您的上下文类中)
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.ComplexType<Apple>();
}
在第二个解决方案中,您将看到列名称如下; Apple_OriginalColumnName1, Apple_OriginalColumnName2
要修复这些问题,您可以在 Fluent Api 中使用 HasColumnName 更改它们。
b) 或通过数据注释
(如果您可以修改 Apple 类,但您不想在此处添加 Id 属性。不适合您的问题,但对其他人来说可能更简单..)
[ComplexType]
public class Apple
{
[Column("ColumnName1")]
public string ColumnName1 { get; set; }
...
}
[ComplexType] attributeof
表格是这里的核心解决方案。
[Column("ColumnName1")]
属性将修复 Apple_ColumnName1
问题。
关于c# - 没有来自外部源的 Id 的 Entity Framework 保存类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43531658/