我正在尝试在多个项目中重用我的模型和上下文。为此,我创建了一个包含模型类的项目/ Nuget包(.Net Standard 2.0)以及上下文。这在.Net Core和Windows Forms中都很有效。以下是我所做的简化示例:
实体框架项目(EF Core 2.0):
Person.cs
:
namespace EfCoreLib {
public class Person {
[Key]
[Required]
public int Id { get; set; }
[Required]
[MaxLength(40)]
public string Firstname { get; set; }
[Required]
[MaxLength(40)]
public string Lastname { get; set; }
}
}
PersonContext.cs
:
namespace EfCoreLib {
public class PersonContext:DbContext {
public DbSet<Person> Persons{ get; set; }
}
}
Windows窗体应用程序项目:
PersonForm.cs
public partial class PersonForm : Form {
public PersonForm() {
InitializeComponent();
}
private void PersonForm_Load(object sender, EventArgs e) {
PersonContext db = new PersonContext();
var allPersons = from p in db.Persons select p;
}
}
在Windows窗体应用程序中,我想要一些模型属性仅用于绑定目的(例如,bool绑定到控件的已启用属性或格式化字符串以在网格中显示)。在EF6中,我在与我的模型(也必须是部分类)相同的命名空间中使用了部分类来实现它。这曾经与EF 6一起使用:
Windows窗体应用程序项目中的 Person.cs
:
namespace EfCoreLib {
public partial class Person {
public string Displayname {
get {
return $"{Firstname} {Lastname}";
}
}
}
}
如果我使用EF Core尝试此操作,我将在Person.cs中收到错误CS103,因为它确实识别属性firstname和lastname。此外,PersonForm.cs
中会出现错误CS0436。
作为一种解决方法,我可以在EF项目中实现这些属性,但由于它们对于使用应用程序是唯一的,这意味着每次我需要对其中一个应用程序进行更改时,我都需要重新部署该程序包。
有人知道如何使用EF项目中的模型和上下文,并使用消费应用程序中的某些属性对其进行扩展吗?
答案 0 :(得分:-1)
最终@Marco在他的评论中发布了答案。
部分定义不能跨越多个模块。
感谢所有关于如何实施解决方案的输入。我知道创建一个视图模型的选项,实际上我已经在很多情况下都这样做了,有时候只需要创建一个主要是copy&amp; amp;糊。