我对此很陌生,我的问题非常特别。我已经google了很多,但却找不到任何相关内容。我在数据库中有两个属性,StartDate和StartMonth。 StartDate的类型为DateTime,StartMonth的类型为字符串类型。 (我知道将这两者都保存到数据库中是愚蠢的,但这不是我可以改变的,因为我没有权限这样做。)我的问题是如何在DB模型中将StartMonth设置为相等StartDate中的月份(因为它是相同的)?相反,这样做的正确方法是什么?任何帮助都非常感谢!
要明确我目前:
[Table("EMPLOYMENT")]
public class Employment : EntityBase
{
[Column("STARTDATE")]
public DateTime? StartDate { get; set; }
[Column("STARTMONTH")]
public string StartMonth { get; set; }
}
编辑: 我尝试了下面的内容(我意识到这不是任何建议,但它是由同事建议的):
[Table("EMPLOYMENT")]
public class Employment : EntityBase
{
[Column("STARTDATE")]
internal DateTime? StartDateInternal { get; set; }
[Column("STARTMONTH")]
private string StartMonth { get; set; }
[NotMapped]
public DateTime? StartDate
{
get
{
return StartDateInternal;
}
set
{
StartDateInternal = value;
StartMonth = value?.ToString("MMMM");
}
}
具体来说,StartMonth现在是私有的,StartDate现在是一个NotMapped属性,它设置StartDateInternal和StartMonth并返回StartDateInternal值,而前一代码中的原始StartDate现在名为StartDateInternal。虽然我可以看到值正在一直传递到模型,但它不会设置值。它总是在数据库中将其设置为NULL。我不知道为什么,并且想知道是否有人能够理解为什么。
答案 0 :(得分:1)
您可以使用 支持字段 ,仅在 StartMonth值不是来自StartDate 时获取月份组。
function cleanUp2() {
var threads = GmailApp.search("SOME SEARCH");
Logger.log(threads.length);
for (var i = 0; i < threads.length; i++) {
var messages = threads[i].getMessages();
Logger.log(messages.length);
for (var j = 0; j < messages.length; j++){
if (messages[j].isDraft()){
Logger.log('me' + 'id msg: ' + messages[j].getId());
deleteMessage('me',messages[j].getId());
}
}
}
}
function deleteMessage(userId, messageId) {
var request = gapi.client.gmail.users.messages.delete({
'userId': userId,
'id': messageId
});
request.execute(
function(resp) { });
}
答案 1 :(得分:0)
将您的二传手标记为function onEdit(e) {
if (e.source.getActiveSheet().getName() !== "Input" || e.range.rowStart != 36 || e.range.columnStart != 4 | e.value !== "Submit") return
e.source.getActiveSheet()
.getRange("E3:E36")
.setValue(e.source.getSheetByName("MasterList")
.getRange("A5:AG5")
.getValue())
}
,然后创建一个设置两个属性的private
方法。
SetStartDate
另一种模拟方法是将[Table("EMPLOYMENT")]
public class Employment : EntityBase
{
[Column("STARTDATE")]
public DateTime? StartDate { get; private set; }
[Column("STARTMONTH")]
public string StartMonth { get; private set; }
public string SetStartDate(DateTime? startDate)
{
this.StartDate = startDate;
this.StartMonth = startDate.HasValue ? startDate.Value.ToString("MMMM") : null;
}
}
的setter标记为StartMonth
,并让private
的setter设置两个属性:
StartDate
答案 2 :(得分:0)
您不应映射StartMonth属性,因此它不会保存在数据库中,但模型仍将具有该属性。你可以这样做:
[NotMapped]
public string StartMonth
{
get
{
return StartDate?.Month.ToString();
}
}
其中NotMapped属性告诉EF不映射此属性,但您可以在代码中使用此属性。此外,您不需要set属性,因为StartMonth将返回StartDate月。这种方式可以确保StartMonth和StartDate.Month没有不同的值。
答案 3 :(得分:0)
你能改变数据库设计吗?
如果是这样,请在数据库中使用触发器或其他工具将STARMONTH列呈现为伪列,返回&#34; month&#34; STARTDATE列的值。
如果没有,那么您可以在处理新的StartDate时设置StartMon:
clear;
clc;
my_image = imread('acetylation.tif');
for i = 1:6
[x_coord, y_coord, intensities]=impixel(my_image);
avg_y = (sum(y_coord))/2;
imshow(my_image);
line([x_coord(1,:),x_coord(2,:)],[avg_y,avg_y], 'Color', 'white')
hold on;
end
数据库伪列将保证所有数据库客户端的结果一致。以上代码适用于使用此代码的任何内容。