gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 23:13:34 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com