c# - 没有来自外部源的 Id 的 Entity Framework 保存类

标签 c# entity-framework

给定一个来自外部源的类(在我的例子中是一个 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/

相关文章:

c# - 为什么使用 EF 序列化后得到无效的 JSON?

c# - 如何在 EF Core 中进行批量更新?

c# - 如何使 contains 在 ef core 2 中不区分大小写?

c# - 欧盟通用数据保护条例 (GDPR) 的 Cookie 建议(想法)

c# - 如何遍历临时表的循环以取出SQL中的每个列名?

asp.net - 如何为 Elmah 使用 EntityFramework 连接字符串?

wpf - MVVM - 直接绑定(bind)到从 VM 公开的模型对象,或在 VM 中实现单独的属性来访问模型属性

c# - 从 ILGenerator 中检索代码

c# - 在 richtextbox 中显示 stdout 和 stderr

c# - 导出部件的 MEF 实例化