在实体 类 中使用显式接口实现时,EF Core 不会在 table 中创建列
When using Explicit Interface Implementation in Entity classes , EF Core does not creates column in table
public interface IRecordInformation
{
DateTime CreatedOn { get; set; }
DateTime ModifiedOn { get; set; }
}
public class CareerApplication : IRecordInformation
{
public int CareerApplicationId { get; set; }
public string Name { get; set; }
public string FileName { get; set; }
public string Email { get; set; }
public DateTime IRecordInformation.CreatedOn { get; set; }
public DateTime IRecordInformation.ModifiedOn { get; set; }
}
我为什么要这样做?
因为如果我更改接口并删除 属性 那么应该有编译时错误,即在 class 中存在实现的接口中没有声明 属性 。这样我就可以从 class 中删除实现。但是,如果我不在 class 中使用接口名称使用显式实现,那么如果我从接口中删除一个 属性,那么相应的 属性 将被视为 属性 的 [=23] =]本身。
我试过
public DateTime CreatedOn { get => ((IRecordInformation)this).CreatedOn; set => ((IRecordInformation)this).CreatedOn = value; }
但是有一个堆栈溢出异常,我正在为它附加图像
Error i am facing
按照@Gert Arnold 的建议工作
public DateTime CreatedOn { get => ((IRecordInformation)this).CreatedOn; set => ((IRecordInformation)this).CreatedOn = value; }
public DateTime ModifiedOn
{
get
{
return ((IRecordInformation)this).ModifiedOn;
}
set
{
((IRecordInformation)this).ModifiedOn = value;
}
}
DateTime IRecordInformation.CreatedOn { get; set; }
DateTime IRecordInformation.ModifiedOn { get; set; }
public bool IsPublished
{
get
{
return ((IPublishInformation)this).IsPublished;
}
set
{
((IPublishInformation)this).IsPublished = value;
}
}
bool IPublishInformation.IsPublished { get; set; }
在我的博客上,您可以找到我在项目中遇到的完整问题http://blogs.anujchauhan.com/post/2020/05/01/Implicit-to-Explicit-implementations-of-interface-in-class-for-Entity-Framework-Core-Common-Columns-in-table-like-CreatedOn-UpdatedOn-DeletedOn-IsPublished
public interface IRecordInformation
{
DateTime CreatedOn { get; set; }
DateTime ModifiedOn { get; set; }
}
public class CareerApplication : IRecordInformation
{
public int CareerApplicationId { get; set; }
public string Name { get; set; }
public string FileName { get; set; }
public string Email { get; set; }
public DateTime IRecordInformation.CreatedOn { get; set; }
public DateTime IRecordInformation.ModifiedOn { get; set; }
}
我为什么要这样做? 因为如果我更改接口并删除 属性 那么应该有编译时错误,即在 class 中存在实现的接口中没有声明 属性 。这样我就可以从 class 中删除实现。但是,如果我不在 class 中使用接口名称使用显式实现,那么如果我从接口中删除一个 属性,那么相应的 属性 将被视为 属性 的 [=23] =]本身。
我试过
public DateTime CreatedOn { get => ((IRecordInformation)this).CreatedOn; set => ((IRecordInformation)this).CreatedOn = value; }
但是有一个堆栈溢出异常,我正在为它附加图像
Error i am facing
按照@Gert Arnold 的建议工作
public DateTime CreatedOn { get => ((IRecordInformation)this).CreatedOn; set => ((IRecordInformation)this).CreatedOn = value; }
public DateTime ModifiedOn
{
get
{
return ((IRecordInformation)this).ModifiedOn;
}
set
{
((IRecordInformation)this).ModifiedOn = value;
}
}
DateTime IRecordInformation.CreatedOn { get; set; }
DateTime IRecordInformation.ModifiedOn { get; set; }
public bool IsPublished
{
get
{
return ((IPublishInformation)this).IsPublished;
}
set
{
((IPublishInformation)this).IsPublished = value;
}
}
bool IPublishInformation.IsPublished { get; set; }
在我的博客上,您可以找到我在项目中遇到的完整问题http://blogs.anujchauhan.com/post/2020/05/01/Implicit-to-Explicit-implementations-of-interface-in-class-for-Entity-Framework-Core-Common-Columns-in-table-like-CreatedOn-UpdatedOn-DeletedOn-IsPublished